home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs49.d81 / hack8a.sfx / issue8a
Text File  |  1990-02-12  |  100KB  |  2,286 lines

  1.                    ########
  2.              ##################
  3.          ######            ######
  4.       #####
  5.     #####  ####  ####      ##      #####   ####  ####  ####  ####  ####   #####
  6.   #####    ##    ##      ####    ##   ##   ##  ###     ##    ####  ##   ##   ##
  7.  #####    ########     ##  ##   ##        #####       ##    ## ## ##   ##
  8. #####    ##    ##    ########  ##   ##   ##  ###     ##    ##  ####   ##   ##
  9. #####  ####  ####  ####  ####  #####   ####  ####  ####  ####  ####   ######
  10. #####                                                                     ##
  11.  ######            ######        ╔SSUE #8
  12.    ##################            ┴UG. '94
  13.        ########
  14.  
  15. ----------------------------------------------------------------------(V1.2)--
  16. ┼DITOR'S ╬OTES:
  17. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  18.  
  19.      ╫OE BE TO ├OMMODORE,
  20.      ╘HE MARKETER'S HAVE FINALLY KILLED IT,
  21.      ╫ITH A LITTLE BIT OF SPENDING HERE,
  22.      ┴ND NOT MUCH OVER THERE,
  23.      ┘OU KNOW THAT ├OMMODORE HAS FINALLY DIED.
  24.   
  25.      ┴ND THAT'S THE WAY LIFE SHOULD BE,
  26.      ╘HE ├OMMODORE FANATICS CRIED.
  27.      ╫E'LL PROBABLY BE BETTER OFF THEY YELL,
  28.      ╠ET ├OMMODORE GO TO HELL.
  29.      ╙O THE QUESTION IS WHO'LL PURCHASE ├OMMODORE?
  30.  
  31. ┘ES, FOR THOSE OF YOU WHO ARE UNAWARE ├OMMODORE HAS DECLARED BANKRUPTCY.
  32. ╘HERE ARE NUMEROUS RUMOURS ABOUND OVER WHOSE INTERESTED IN WHAT DIVISIONS OF
  33. ├OMMODORE AND SUCH - THERE'S STILL NO DEFINATE WORD ON THE NET. ╙EVERAL
  34. FACTORS CAN BE BLAMED FOR ├OMMODORE'S DEMISE: ├OMMODORE _NEVER_ WAS
  35. SUCCESSFUL IN MARKETING PRODUCTS. ╘HE ENGINEERS WOULD OFTEN TURN OUT MIRACLE
  36. MACHINES THAT THE MARKETING DEPARTMENT (╔ WONDER IF THERE EVEN WAS ONE)
  37. PROMOTED BADLY, IF AT ALL. ╫HAT HAS PUT THE NAIL IN THE COFFIN FOR ├OMMODORE
  38. WAS THE LACK OF FINANCIAL CAPITAL TO KEEP THE COMPANY IN OPERATION. ┴ LOT OF
  39. THIS NEWS HAS BEEN DISCUSSED ON ╟┼NIE, THE NEWSGROUP ├OMP.╙YS.├BM, AND
  40. VARIOUS MAGAZINES AS WELL SO ╔ WON'T ELABORATE ANY FURTHER. 
  41.  
  42. ╙PEAKING OF MAGAZINES, ├REATIVE ═ICRO ─ESIGNS HAS STARTED A MAGAZINE FOR
  43. ├OMMODORE 8-BIT'S CALLED, "├OMMODORE ╫ORLD". ╘HE MAGAZINE IS VERY WELL DONE. 
  44. ╘HERE ARE OTHER MAGAZINES THAT ALSO DESERVE MENTION: ─IE╚ARD, THE ╒NDERGROUND
  45. AND MANY OTHERS. ├OMMODORE MAY BE BANKRUPT BUT THE ├OMMODORE WILL STILL LIVE
  46. FOREVER.
  47.  
  48. ╙PEAKING OF LIVING FOREVER, ├OMMODORE ╚ACKING IS LOOKING FOR ARTICLES ON ANY
  49. SUBJECT DEALING WITH ANY ASPECT OF TECHNICAL PROGRAMMING OR HARDWARE ON THE
  50. ├OMMODORE. ╔F YOU'VE GOT AN ARTICLE ALREADY WRITTEN, OR AN IDEA FOR ONE
  51. _PLEASE_ FEEL FREE TO E-MAIL ME VIA DUCK@PEMBVAX1.PEMBROKE.EDU. ═ANY THANKS
  52. TO THE AUTHORS WHOSE WORKS MAKE UP THIS AND PREVIOUS ISSUES. 
  53.  
  54. =============================================================================
  55.  
  56.   ╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS
  57.   ╞╘╨ FROM CCNGA.UWATERLOO.CA (AMONG OTHERS) UNDER PUB/CBM/HACKING.MAG
  58.   AND VIA A MAILSERVER WHICH DOCUMENTATION CAN BE OBTAINED BY SENDING
  59.   MAIL TO "DUCK@PEMBVAX1.PEMBROKE.EDU" WITH A SUBJECT LINE OF
  60.   "MAILSERVER" AND THE LINES OF "HELP" AND "CATALOG" IN THE BODY OF THE
  61.   MESSAGE.
  62.  
  63. =============================================================================
  64.  
  65.   ╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN
  66.   WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL
  67.   AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
  68.   ┴ CHARGE OF NO GREATER THAN 5 ╒╙ DOLLARS OR EQUIVLENT MAY BE CHARGED
  69.   FOR LIBRARY SERVICE / DISKETTE COSTS FOR THIS "NET-MAGAZINE".
  70.  
  71. =============================================================================
  72. ╔N ╘HIS ╔SSUE:
  73.  
  74. ├OMMODORE ╘RIVIA ├ORNER
  75.  
  76. ╘HIS SECTION OF ├=╚ACKING CONTAINS QUESTIONS THAT TEST YOUR KNWOLEDGE OF
  77. TRICKS AND LITTLE KNOWN-INFORMATION FOR THE ├OMMODORE COMPUTERS. ┼ACH ISSUE
  78. THEY'LL BE ANSWERS TO THE PREVIOUS ISSUES QUESTIONS AND NEW QUESTIONS. ╚OW
  79. MUCH DO YOU KNOW?
  80.  
  81. ╥╙232 ├ONVERTER
  82.  
  83. ╘HIS ARTICLE, WITH A MINIMUM OF PARTS, DETAILS HOW TO MAKE YOUR OWN ╥╙-232
  84. CONVERTER. 
  85.  
  86. ╨ROGRAMMING THE ├OMMODORE ╥┴═ ┼XPANSION ╒NITS (╥┼╒S)
  87.  
  88. ╘HE ╥┼├ CHIP IS A ─═┴ (DIRECT MEMORY ACCESS) CHIP THAT ALLOWS FOR THE
  89. ├OMMODORE 64 AND 128 TO USE THE ╥AM ┼XPANSION ╒NITS. ╘HIS ARTICLE EXAMINES
  90. HOW TO ACCESS THE CHIP IN YOUR OWN ═╠ PROGRAMS.
  91.  
  92. ┴ ─IFFERENT ╨ERSPECTIVE: ╘HREE-─IMENSIONAL ╟RAPHICS ON THE ├64
  93.  
  94. ╔N THIS ARTICLE, CO-WRITTEN BY ╙TEPHEN ╩UDD AND ╟EORGE ╘AYLOR, IS
  95. PRESENTED ALL THE BASIC GRAPHICS TOOLS AND MATHEMATICAL THEORY BEHIND
  96. 3D GRAPHICS.  ╘HE BASIC TOOLS ARE USING A CHARSET TO MAKE GRAPHICS,
  97. PLOTTING A POINT, DRAWING A LINE, CLEARING THE GRAPHICS, AND DOUBLE
  98. BUFFERING.  ╘HE 3D TOOLS ARE DEFINING A 3D OBJECT, ROTATION OF THE
  99. OBJECT IN 3D SPACE, AND PERSPECTIVE VIEWING ON A 2D SCREEN.
  100. ╨ROGRAMS ARE PRESENTED IN BASIC 2.0, BASIC 7.0, AND ASSEMBLY WHICH
  101. SHOW A ROTATING CUBE OUTLINE.
  102.  
  103. ─ESIGN OF A '╥EAL' ╧PERATING ╙YSTEM FOR THE 128: ╨ART ╔
  104.  
  105. ╫RITTEN ├RAIG ┬RUCE THIS ARTICLE EXAMINES A 'REAL' OPERATING SYSTEM FOR THE
  106. ├OMMDORE 128.  ╔T FOCUSES ON THE ╧╙ BEING ═ULTI-TASKING, ─ISTRIBUTED AND BASED
  107. ON A ═ICRO╦ERNAL.  ╫HY?  ┴S HE STATES, "┬ECAUSE ╔'M DESIGNING IT, AND THAT'S
  108. WHAT INTERESTS ME.  ╘HE EASE-OF-CONSTRUCTION THING IS IMPORTANT TOO.  ┴NOTHER
  109. IMPORTANT QUESTION IS 'CAN IT BE DONE?'.  ╘HE ANSWER IS 'YES.'  ┴ND IT WILL
  110. BE DONE, WHENEVER ╔ GET AROUND TO IT (ONE OF THESE LIFETIMES)."
  111.  
  112. =============================================================================
  113. ├OMMODORE ╘RIVIA ├ORNER
  114. BY ╩IM ┬RAIN (BRAIN@MAIL.MSEN.COM)
  115.  
  116. ╔T IS TIME FOR ANOTHER DOSE OF TRIVIA!  ┴S SOME OF YOU MAY KNOW, ╘HE
  117. ├OMMODORE ╘RIVIA ┼DITIONS ARE POSTED EVERY MONTH TO THE ╒╙┼╬┼╘ NEWSGROUPS
  118. COMP.SYS.CBM, ALT.FOLKLORE.COMPUTERS, AND COMP.SYS.AMIGA.ADVOCACY.  ╘HIS
  119. ARTICLE IS A COMPILATION ╘RIVIA ┼DITIONS 2-8, WITH ONLY THE QUESTIONS
  120. APPEARING FOR ┼DITION 8.  ╘HESE ARE PART OF A ╘RIVIA ├ONTEST IN WHICH 
  121. ANYONE MAY ENTER.  ╔F YOU WISH TO PARTICIPATE IN THE NEWEST
  122. ╘RIVIA CONTEST (╫HICH IS ON ╘RIVIA 8 AS ╔ WRITE THIS), PLEASE SEND YOUR
  123. ANSWERS TO ME AT 'BRAIN@MAIL.MSEN.COM'. 
  124.                                         
  125. ╘HE FOLLOWING ARTICLE CONTAINS THE ANSWERS TO THE ╩ANUARY EDITION OF TRIVIA
  126. ($00┴ - $01╞), THE QUESTIONS AND ANSWERS FOR ╞EBRARY ($020 - $02╞), ═ARCH 
  127. ($030 - $03╞), ┴PRIL ($040 - $04╞), ═AY ($050 - $05╞), ╩UNE ($060 - $06╞), 
  128. AND THE QUESTIONS FOR THE ╩ULY EDITION ($070 - $07╞).  ┼NJOY THEM!
  129.  
  130.  
  131. ╚ERE ARE THE ANSWERS TO THE ├OMMODORE TRIVIA QUESTIONS FOR ╩ANUARY, 1994.
  132.  
  133.  
  134. ╤ $00┴) ╫HAT WAS THE ├ODE-╬AME OF THE ┴MIGA WHILE IN ─EVELOPMENT?
  135.  
  136. ┴ $00┴) ╠ORRAINE.  ┴MIGA WAS THE COMPANY NAME.  ╫HEN ├OMMODORE BOUGHT THE
  137.         COMPANY, THEY SCRAPPED THE MODEL NAME AND USED THE OLD COMPANY NAME.
  138.  
  139. ╤ $00┬) ╫HAT IS ╠ORD ┬RITISH'S ╥EAL ╬AME (╘HE CREATOR OF THE ╒LTIMA
  140.         ╙ERIES)?
  141.  
  142. ┴ $00┬) ╥ICHARD ╟ARRIOTT.  ╙COTT ╙TATTON HAS MET HIM AND SAYS THAT HE IS SON
  143.         OF ASTRONAUT ╧WEN ╟ARRIOTT.
  144.  
  145. ╤ $00├) ╫HAT IS THE ╨╧╦┼ LOCATION AND VALUE THAT WILL FRY AN EARLY MODEL
  146.         ╨┼╘?        
  147.         
  148. ┴ $00├) 59458.  ╔T IS IN THE (╓ERSATILE ╔NTERFACE ┴DAPTER, 6522)
  149.         ╬O, ╔ WON'T TELL YOU WHAT TO POKE INTO IT, BUT ╔ WILL TELL YOU
  150.         THAT IT IS NOT THE ONLY WAY TO FRY A ╨┼╘.  HERE IS A DESCRIPTION FROM
  151.         NONE OTHER THAN ╩IM ┬UTTERFIELD
  152.  
  153.         "╘HE POKE SHOPWN ABOVE IS CORRECT. ╔TS INTENTION WAS TO SPEED UP EARLY
  154.         MODEL ╨┼╘S BY MASKING THE ╥┼╘╥┴├┼ LINE (BY SWITCHING IT TO OUTPUT)...
  155.  
  156.         HOWEVER, ├OMMODORE SUBSEQUENTLY ╥┼─┼╙╔╟╬┼─ THE INTERFACE IN SUCH A WAY
  157.         THAT MAKING THE ╓╔┴ PIN AN OUTPUT CAUSED (NOW) TWO OUTPUTS TO FIGHT
  158.         EACH OTHER ... RESULT, ╓╔┴ AND/OR VIDEO CIRCUITRY BURNT OUT.
  159.  
  160.         ╠┴╘┼╥ (─AYS OF "FAT 40" AND 80-COLUMN ╨┼╘S), THE NEW ├╥╘ CONTROLLER
  161.         CHIP COULD BE FIDDLED WITH ╨╧╦┼╙ SO THAT IT GENERATED SCAN RATES
  162.         COMPLETELY OUT OF THE CAPACITY OF THE ├╥╘ DEFLECTION CIRCUITS.  
  163.         ╥ESULT: BURNT OUT DEFLECTION CIRCUITRY ... AND THAT WAS NO ┘╧╦┼!"
  164.  
  165.         ╥ICHARD ┬RADLEY SAYS THAT 59595 IS THE SECOND POKE THAT ╩IM IS
  166.         REFERRING TO.
  167.  
  168.         ╔ ALSO HAVE IN ON WORD FROM ┼THAN ─ICKS THAT 59409 IS ANOTHER
  169.         INFAMOUS POKE, BUT ╔ WOULDN'T TRY ANY OF THESE!
  170.         
  171. ╤ $00─) ╧N THE ╨LUS 4 AND ├-16, THE ╓╔├ CHIP WAS REPLACED WITH THE ╘┼─
  172.         CHIP.  ╫HAT DOES ╘┼─ STAND FOR?
  173.  
  174. ┴ $00─) ╘┼─ = ╘EXT ┼DITING ─EVICE.  ╔T DID NOT HAVE AS MANY CAPABILITIES
  175.         AS THE ╓╔├ ╔╔.
  176.         
  177. ╤ $00┼) ├OMMODORE ╨RODUCED A DAISY-WHEEL LETTER QUALITY PRINTER IN ╬ORTH
  178.         ┴MERICA (MAYBE ELSEWHERE) FOR THE ├OMMODORE ╙ERIAL ╠INE.  ╬AME IT.
  179.                
  180. ┴ $00┼) ╘HE ├OMMODORE ─╨╙ 1101.  ╘HE ├┬═ 6400 WAS ANOTHER EARLIER ATTEMPT
  181.         AT A DAISY-WHEEL PRINTER, BUT IT HAD AN ╔┼┼┼-488 INTERFACE.
  182.         
  183. ╤ $00╞) ╫HAT IS THE VERSION OF ─╧╙ IN THE 1541?
  184.  
  185. ┴ $00╞) 2.6
  186.  
  187. ╤ $010) ╫HAT IS THE ╓ERSION OF ┬┴╙╔├ IN THE ╨LUS 4 AND THE ├-16?
  188.  
  189. ┴ $010) 3.5.
  190.  
  191. ╤ $011) ╫HAT ARE THE NICKNAMES OF THE ORIGINAL THREE CUSTOM ┴MIGA CHIPS?
  192.  
  193. ┴ $011) ─APHNE/─ENISE, ┴GNES/┴GNUS, AND ╨AULA/╨ORTIA, OR ╚UEY, ─UEY, AND ╠OUIE.
  194.         ─ENISE, ┴GNES, AND ╨AULA WERE THE ┴MERICAN NAMES, BUT THE THE OTHERS
  195.         CREPT IN FROM SOMWHERE.  THE DUCKS WERE ALWAYS A JOKE, BUT CAUGHT ON
  196.         AS ALTERNATE NAMES.
  197.  
  198. ╤ $012) ├OMMODORE PRODUCED A 64 IN A ╨┼╘ CASE.  ╫HAT IS ITS NAME AND MODEL
  199.         NUMBER?
  200.  
  201. ┴ $012) ╘HE ┼DUCATOR 64.  ╔T WAS MODEL NUMBER ├┬═ 4064, AND IT WAS ALSO CALLED
  202.         THE ╨┼╘64.  ╬OTE THAT THIS VERSION OF THE 64 WAS THE SECOND ATTEMPT.
  203.         ├OMMODORE FIRST TRIED TO SELL THE "┼DUCATOR 64" TO SCHOOLS IN THE
  204.         REGULAR 64 CASE, BUT ADMINISTRATORS AND TEACHERS DISLIKED THE "HOMEY"
  205.         LOOK.  ╘HUS, IT WAS SQUEEZED INTO A ╨┼╘ CASE AND SOLD BETTER, ALTHOUGH
  206.         ╔ DON'T THINK IT WAS EVER A KILLER SELLER.
  207.  
  208. ╤ $013) ├OMMODORE SOLD A 1 MEGABYTE FLOPPY DISK DRIVE IN A 1541 CASE.
  209.         ╟IVE THE MODEL NUMBER.
  210.  
  211. ┴ $013) ╘HE ├OMMODORE ╙╞─ 1001.  ╔T WAS ACTUALLY HALF OF AN ├┬═ 8250 ╠╨
  212.         WITH A SLIGHTLY REVISED ╥╧═.
  213.         
  214. ╤ $014) ╫HAT DOES ╟├╥ STAND FOR?
  215.  
  216. ┴ $014) ╟ROUP ├ODE ╥ECORDING.
  217.  
  218. ╤ $015) ├OMMODORE PRODUCED A DRIVE TO ACCOMPANY THE ╨LUS 4 INTRODUCTION THAT
  219.         WAS DESIGNED SPECIFICALLY FOR THE ╨LUS/4.  ╟IVE THE MODEL NUMBER.
  220.                                                  
  221. ┴ $015) THE ├┬═ 1551 WAS THE NEW, HIGH-PERFORMANCE DRIVE THAT WAS DESIGNED
  222.         SPECIFICALLY FOR THE ├OMMODORE ╨LUS/4 AND ├-16.  ╘HE 1542 WAS
  223.         ACTUALLY JUST A REPACKAGED 1541 IN A GREY CASE THAT WAS MADE AVAILABLE
  224.         FOR PEOPLE WHO DIDN'T WANT TO SPEND THE EXTRA MONEY FOR THE 1551.  ╘HE
  225.         EXTRA COST RESULTED FROM THE 1551 SPORTING A NEW, PARALLEL TRANSFER
  226.         METHOD THAT INCREASED TRANSFER RATES 400%.
  227.  
  228. ╤ $016) ╫HAT DOES ╙╔─ STAND FOR?
  229.  
  230. ┴ $016) ╙╔─ = ╙OUND ╔NTERFACE ─EVICE
  231.  
  232. ╤ $017) ╫HAT DOES THE ACRONYM ╦┼╥╬┴╠ STAND FOR?
  233.  
  234. ┴ $017) ╦┼╥╬┴╠ = ╦EYBOARD ┼NTRY ╥EAD, ╬ETWORK, ┴ND ╠INK.  ╘HIS IS MOST LIKELY
  235.         ANOTHER "WORDS AFTER THE LETTERS" ACRONYM, ALONG THE LINES OF THE
  236.         ╨┼╘ ACRONYM.
  237.  
  238. ╤ $018) ╫HAT VERSION OF ─╧╙ DOES THE 1571 HAVE?
  239.  
  240. ┴ $018) 3.0
  241.  
  242. ╤ $019) ╫HAT OTHER TWO ├OMMDORE ─ISK ─RIVES SHARE THE SAME ─╧╙ VERSION
  243.         NUMBER AS THE 1571?
  244.  
  245. ┴ $019) ╔ GOT MORE THAN ╔ BARGAINED FOR ON THIS QUESTION, SINCE THERE
  246.         ARE FOUR DRIVES WHICH HAVE THE SAME ─╧╙ VERSION THAT ╔ FEEL ARE
  247.         ADEQUATE RESPONSES TO THIS QUESTION. 
  248.         
  249.         ╘HE ├┬═ ─9060 AND ─9090, ALTHOUGH ╔ DOUBT THE CODE IS THE SAME.
  250.         ╘HE ─ SERIES WERE HARD DRIVES. 
  251.                                        
  252.         ╘HE 8280 ─UAL 8" ╞LOPPY ─RIVE.
  253.         
  254.         ╘HE 1570, WHICH WAS A SINGLE SIDED VERSION OF THE 1571 IN A 1541
  255.         CASE PAINTED TO MATCH THE 128.  ╘HE ╥╧═ IS SLIGHTLY DIFFERENT,
  256.         ENOUGH TO MAKE IT UNRECOGNIZABLE AS EITHER A 1541 OR A 1571 IN SOME
  257.         CASES.
  258.  
  259.         ╘HE 1571╔╔ AND THE 1571─, WHICH IS THE DRIVE IN THE ├128─, ALSO 
  260.         HAVE THIS ─╧╙ REVISION, BUT THAT STANDS TO REASON, SINCE THEY ARE 
  261.         IN THE 1571 LINE.
  262.  
  263. ╤ $01┴) ╚OW MANY FILES WILL THE 1571 HOLD?
  264.  
  265. ┴ $01┴) 144 IN BOTH MODES.  ╔ AM SURPRISED ├OMMODORE DIDN'T ADD A TRACK OR
  266.         PUT ANOTHER DIRECTORY ON THE BACK.
  267.  
  268. ╤ $01┬) ╚OW MANY FILES WILL THE 1541 HOLD?
  269.  
  270. ┴ $01┬) 144. 
  271.              
  272. ╤ $01├) ╫HAT DID ├OMMODORE MAKE RIGHT BEFORE ENTERING THE COMPUTER MARKET?
  273.  
  274. ┴ $01├) ├ALCULATORS.  ╘HEY ALSO MADE OFFICE EQUIPMENT, WATCHES, ADDING 
  275.         MACHINES, AND THERMOSTATS, HENCE THE NAME "├OMMODORE ┬USINESS 
  276.         ═ACHINES".          
  277.      
  278. ╤ $01─) ├OMMODORE INTRODUCED AN ILL-FATED 4 COLOR PLOTTER.  ╟IVE THE MODEL
  279.         NUMBER.
  280.  
  281. ┴ $01─) THE ├OMMODORE 1520.  ╔T USED 4 INCH WIDE PAPER AND COULD USE 4
  282.         COLORS.
  283.         
  284. ╤ $01┼) ╙OME FORMATS OF ├╨/═ WRITE DISKS USING THE ═╞═ FORMAT.  ╫HAT DOES
  285.         ═╞═ STAND FOR?
  286.  
  287. ┴ $01┼) ═╞═ = ═ODIFIED ╞REQUENCY ═ODULATION
  288.         
  289. ╤ $01╞) ╧N THE ├OMMDORE 128, THE USER MANUAL LEFT THREE COMMANDS UNDOCUMENTED.
  290.         ╧NE WORKS, AND THE OTHER GIVES A NOT-IMPLEMENTED ERROR.  ╬AME THE
  291.         COMMANDS AND WHAT EACH ONE DOES OR DOES NOT DO.               
  292.  
  293. ┴ $01╞) ╥╥┼╟ READS THE INTERNAL REGISTERS AFTER A ╙┘╙ COMMAND.
  294.         ╧╞╞ GIVES AN UNIMPLEMENTED COMMAND ERROR. 
  295.         ╤╒╔╘ DOES TOO.
  296.  
  297.  
  298. ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #3 FOR ╞EBRUARY, 1994.
  299.  
  300.             
  301. ╤ $020) ╫HAT DOES THE LETTERS ╔┼┼┼ IN ╔┼┼┼-488 STAND FOR?
  302.  
  303. ┴ $020) ╔NSTITUTE OF ┼LECTRICAL AND ┼LECTRONICS ┼NGINEERS.
  304.  
  305. ╤ $021) ╫HAT WAS THE LOGO OF ┬ATTERIES ╔NCLUDED?
  306.  
  307. ┴ $021) ╔T WAS A THE FACE AND HANDS OF A MAN WITH GLASSES INSIDE A CIRCLE.
  308.         ┼ARLY RENDITIONS OF HIM WERE IN BLACK AND WHITE, WHILE LATER ONES HAD
  309.         HIM WITH BLOND HAIR A A RED SHIRT.  ╙OME VIEWS HAD HIM ACTUALLY 
  310.         TYPING ON THE 64/╓╔├ WITH ONE FINGER, BUT MOST JUST SHOWED HIM, 
  311.         NOT THE KEYBOARD.
  312.  
  313. ╤ $022) ╘HE ├OMMODORE ╓╔├-20, 64, AND 128 COMPUTERS EMULATE IN SOFTWARE A VERY
  314.         IMPORTANT INTEGRATED CIRCUIT. ╫HAT IS ITS NUMBER, AND WHY IS IT 
  315.         IMPORTANT?
  316.  
  317. ┴ $022) ╘HE 6551 ╒┴╥╘ ╔├.  ╔T IS USED FOR ╥╙-232 COMMUNICATIONS.
  318.  
  319. ╤ $023) ├OMMODORE WATCHES PLAY A BEAUTIFUL SONG FOR THE ALARM.  ╫HAT IS THE
  320.         SONG'S TITLE?
  321.  
  322. ┴ $023) ╞LEUR-DE-LIS.  ╘HE "╟ODFATHER" THEME.
  323.  
  324. ╤ $024) ╘HE ├2╬ STYLE ├OMMODORE TAPE DECKS ARE IMPRESSIVE IN HANDLING ERRORS.
  325.         ╚OW MANY TIMES IS A SINGLE PROGRAM STORED ONTO TAPE?
  326.  
  327. ┴ $024) ╘WICE, SECOND COPY IS PLACED RIGHT AFTER THE FIRST.  ╘HAT MEANS, EVEN
  328.         IF YOU GET A LOAD ERROR ON LOAD, YOU MIGHT BE ABLE TO JUST RUN THE 
  329.         PROGRAM ANYWAY, AS A LOAD PUTS THE FIRST COPY IN MEMORY, AND VERIFIES
  330.         IT AGAINST THE SECOND COPY.
  331.         
  332. ╤ $025) ╫HAT IS A JIFFY?
  333.  
  334. ┴ $025) ┴ JIFFY IS 1/60TH OF A SECOND.  ╔T IS THE SAME ON ╨┴╠ AND ╬╘╙├
  335.         ├OMMODORE COMPUTERS.
  336.  
  337. ╤ $026) ╫HAT IS THE SCREEN RESOLUTION OF THE ├OMMODORE ╓╔├-20?
  338.  
  339. ┴ $026) ╧N THE ╓╔├-╔ ╔├, THE TEXT AND GRAPHICS SCREENS ARE DEFINABLE WITHIN
  340.         LIMITS.  ╘HEREFORE, THERE ARE A NUMBER OF ANSWERS THAT ARE CORRECT:
  341.  
  342.         ╘HE DEFAULT SCREEN HAS (AND THE ANSWERS ╔ WAS LOOKING FOR):
  343.  
  344.         ╘EXT:     22╚ X 23╓ = 506 CHARACTERS
  345.         ╟RAPHICS: 176╚ X 184╓ = 32384 PIXELS
  346.         
  347.         ╚OWEVER, ON EXPERIMENTATION WITH A ╬╘╙├ ╓╔├-╔ (6560), ╔ FOUND THAT
  348.         IT COULD SUPPORT A RESOLUTION OF:
  349.  
  350.         ╘EXT:     24╚ X 29╓ = 696 CHARACTERS
  351.         ╟RAPHICS: 192╚ X 232╓ = 44544 PIXELS
  352.  
  353.         ┘OUR MILEAGE MAY VARY, BUT THESE NUMBERS REMOVE ALL BORDER AREA.
  354.         (╔ AM NOT SURE IF YOU CAN USE ALL THE PIXELS, SINCE THE ╓╔├-╔ ONLY
  355.         ALLOWS 32768 TO BE USED.  ┘OU MIGHT BE ABLE TO FLIP THE GRAPHICS
  356.         PAGE IN THE MIDDLE OF THE SCREEN, BUT ╔ LEAVE THAT AS AN EXERCISE.)
  357.     
  358.         ╘HE ╓╔├-╔ ALSO SUPPORTS A VIRTUAL SCREEN, WHICH CAN BE "PANNED" SO
  359.         THAT THE PHYSICAL SCREEN BECOMES A "WINDOW" INTO THE VIRTUAL SCREEN.
  360.         ╘HE MAXIMUM "SCROLLABLE" VIRTUAL SCREEN ON ╬╘╙├ IS:
  361.  
  362.         ╘EXT:     28╚ X 32╓? = 896 CHARACTERS
  363.         ╟RAPHICS: 224╚ X 256╓? = 57344 PIXELS
  364.  
  365.         ╘HE ╓╔├ SUPPORTS MORE RESOLUTION THAN 32╓, BUT YOU CAN NEVER SEE
  366.         IT SINCE YOU CAN'T SCROLL IT INTO VIEW, SO THE POINT IS MOOT.
  367.  
  368.         ╙O, IF ╔ DIDN'T THOROUGHLY CONFUSE YOU, EMAIL ME AND ╔ WILL MAKE
  369.         SURE ╔ DO!
  370.      
  371. ╤ $027) ╫HY IS THE ╓╔├-20 NAMED THE ╓├-20 IN ╟ERMANY?
  372.  
  373. ┴ $027) ┬ECAUSE '╓" IS PRONOUNCED '╞" IN ╟ERMANY, AND THE RESULTING
  374.         PRONUNCIATION WAS A NAUGHTY WORD. 
  375.    
  376.         ├OMMODORE PUT ONE OVER ON MANY PEOPLE.  ╘HE ╓╔├-20 WAS DESIGNED IN
  377.         THE STATES AND GIVEN THAT NAME DUE TO THE ╔├ THAT DID THE GRAPHICS.
  378.         ╫HEN THE MARKETING STARTED, ├┬═ FOUND OUT THE NAME WAS NO GOOD IN
  379.         ╟ERMANY, SO THEY QUICKLY RENAMED IT ╓├-20.  ╘HE AFTER-THE-FACT
  380.         ╓OLKS-├OMPUTER CONJURED UP IMAGES OF THE ╓OLKSWAGON CAR (╓╫), WHICH
  381.         WAS POPULAR AT THE TIME FOR ITS DEPENDABILITY AND PRICE.  ╘HE REST IS
  382.         HISTORY...
  383.          
  384. ╤ $028) ╫HY WAS EARLY ├OMMODORE EQUIPMENT BUILT INTO SUCH HEAVY ENCLOSURES?
  385.  
  386. ┴ $028) ╙IMPLE.  ├OMMODORE MADE OFFICE FURNITURE, WHICH INCLUDES DESKS AND
  387.         FILING CABINETS.  ╘HEY SIMPLY USED THE FACILITIES AND PARTS ON HAND.
  388.         ╘HE FACT THAT, AT THE TIME THE ╨┼╘ CAME OUT, PEOPLE EQUATED PHYSICAL
  389.         STABILITY OF A MACHINE AS AN INDICATION OF ITS WORTH, SERVED ONLY TO
  390.         REINFORCE THE DECISION.  ┴LSO, THE SYSTEM HAD TO HOLD UP THE BUILT-IN
  391.         MONITOR.
  392.                                                         
  393.         ═OST PEOPLE THINK IT IS DUE TO ╞├├ REGULATIONS.  ╞├├ REGULATIONS HAD
  394.         NOT BEEN DETERMINED AT THE TIME THE ╨┼╘ CAME OUT, ALTHOUGH THE
  395.         ENGINEERS DID KNOW THAT THE ├╥╘ PRODUCED MANY ELECTRICAL HAZARDS WHICH
  396.         COULD BE ALLEVIATED WITH A SHIELDED METAL CASE.  ├OMMODORE HAS ALWAYS
  397.         BEEN A "CHEAP" COMPANY, SO THE FACT THAT THEY COULD GET GOOD
  398.         SHIELDING IN-HOUSE AT ALMOST NO COST PROVED TO BE THE OVERRIDING
  399.         FACTOR. ╔T MIGHT INTEREST SOME TO NOTE THAT, EVEN WITH THE METAL
  400.         CASE, EARLY ╨┼╘S HAD FOIL INSIDE AS A SECONDARY SHIELD.  ╘HE REASON
  401.         HAS TO DO WITH THE KEYBOARD BEING MOSTLY PLASTIC, AS THE SHIELD FIT
  402.         DIRECTLY UNDERNEATH, BUT THE REASON FOR IT REMAINS A MYSTERY TO ME.
  403.                                                               
  404. ╤ $029) ╫HAT TWO ┬┴╙╔├ 2.0 COMMANDS MIGHT STILL WORK IF MISPELLED?
  405.    
  406. ┴ $029) ╘HE ANSWERS ╔ WAS LOOKING FOR ARE ┼╬─ AND ╙╘╧╨, ALTHOUGH SOMEONE
  407.         CORRECTLY POINTED OUT THAT ╟╧ ╘╧ CAN BE CONSTRUED AS A MISPELLING.
  408.         ┴LSO, PRINT#, GET#, AND INPUT# MIGHT WORK IF THE '#' WAS OMITTED AND 
  409.         THE PROGRAM WAS GETTING DATA TO SCREEN OR KEYBOARD.
  410.  
  411.         ┴LTHOUGH THE FOLLOWING AREN'T REALLY THE RESULT OF MISPELLED COMMANDS,
  412.         ╔ PUT THEM IN, SINCE YOU COULD STRETCH THE DEFINITION OF MISPELLED TO
  413.         INCLUDE THEM.
  414.  
  415.         ╠┼╘ WOULD WORK IF IT WAS LEFT OUT, SINCE ╠┼╘ WAS AN OPTIONAL 
  416.         KEYWORD.  ├OMMANDS OF THE FORM <KEYWORD> <NUMBER OR VARIABLE> WOULD
  417.         WORK IF LETTERS WERE TACKED ONTO THE END. (EXAMPLE: ╥╒╬─┘., PRG HAS 
  418.         A VALID LINE 0, AND ─┘ = 0).  ╞INALLY, ╠╧┴─"JIM",8,1GARBAGE WOULD
  419.         WORK DUE TO THE WAY ╠╧┴─ ABSOLUTE WORKED, BUT THAT IS A STRETCH!
  420.      
  421. ╤ $02┴) ╫HAT DOES ├╔┴ STAND FOR? (NOT THE ╒.╙. ├╔┴!)
  422.  
  423. ┴ $02┴) ├╔┴ = ├OMPLEX ╔NTERFACE ┴DAPTER.  ╘HE GERMAN ═AGAZINE 64'ER CALLS
  424.         IT A ├ONTROL ╔NTERFACE ┴DAPTER, BUT THAT IS NOT ITS OFFICIAL
  425.         NAME.
  426.      
  427. ╤ $02┬) (HARD ONE) ╫HAT IS THE KEY ╓╔├ CAPABILITY THAT MAKES FULL-SCREEN
  428.         HIRES GRAPHICS POSSIBLE ON THE _╓╔├-20_?
  429.  
  430. ┴ $02┬) ┴ LOT OF PEOPLE ANSWERED REDEFINABLE CHARACTERS, BUT THAT ALONE DOES
  431.         NOT PROVIDE ╞╒╠╠-╙├╥┼┼╬ GRAPHICS. 256 8*8 CELLS GIVES YOU A LITTLE
  432.         OVER 1/2 OF THE SCREEN IN GRAPHICS, BUT THE ╓╔├ HAS THE ABILITY TO 
  433.         MAKE EACH CHARACTER CELL BE 8*16, WHICH GIVES ENOUGH PIXELS TO MAP
  434.         THE ENTIRE DEFAULT SCREEN.
  435.      
  436. ╤ $02├) ╚OW MANY CASSETTE PORTS DOES THE ├┬═ 8032 COMPUTER HAVE?
  437.  
  438. ┴ $02├) ╘WO.  ╧NE ON BACK, ONE ON SIDE NEAR THE BACK.
  439.      
  440. ╤ $02─) ╫HAT 5 BYTES MUST APPEAR IN EVERY ├OMMODORE 64 AUTOSTART CARTRDGE AND
  441.    WHAT LOCATION IN MEMORY MUST THEY BE PLACED AT?
  442.  
  443. ┴ $02─) ├┬═80 AT $8004.  ╘HE LETTERS MUST HAVE BIT 7 SET. ╙O, THE ACTUAL
  444.         ╨┼╘╙├╔╔ CODES ARE 195, 194, 205, 056, 048.
  445.                      $C3, $C2, $CD, $30, $30 IN ╚┼╪
  446.  
  447. ╤ $02┼) ╫HAT IS THE CORRECT ├OMMODORE TECHNICAL TERM FOR "╙PRITES"?
  448.  
  449. ┴ $02┼) ═╧┬S, OR ═OVABLE ╧BJECT ┬LOCKS.
  450.      
  451. ╤ $02╞) (╘HREE PARTER, ALL PARTS MUST BE CORRECT)  "╨USH-WRAP-CRASH" IS A
  452.         NICKNAME FOR A CONDITION THAT CAN LOCK UP AN OLD-STYLE ├=64. 
  453.         ╫HAT CAUSES IT? 
  454.         ╚OW CAN IT BE AVOIDED (BESIDES NOT DOING IT)?
  455.         ╫HAT IS THE ONLY WAY OUT ONCE IT HAS OCCURED (BESIDES REBOOTING)?
  456.  
  457. ┴ $02╞) ╫OW, ╔ GOT SO MANY RESPONSES TO THIS!  ╘HIS QUESTION ACTUALLY
  458.         DEALT WITH A TYPICAL USER, BUT PEOPLE SENT IN DESCRIPTIONS OF
  459.         WHAT THE CODE DOES AND HOW TO PATCH IT. ╙O, THERE ARE TWO SETS
  460.         OF ANSWERS TO THIS:
  461.  
  462.     ╒SER ┴NSWER:
  463.  
  464.     1) ╔F YOU PUT THE CURSOR AT THE BOTTOM OF THE SCREEN AND TYPE 82 CHARACTERS
  465.        (NOT 81) AND THEN TRYING TO DELETE BACK TO THE 78TH ONE.  
  466.     2) ┴NY OF THE FOLLOWING WILL WORK:
  467.     
  468.           ─O NOT USE THE FOLLOWING COLORS FOR THE CURSOR: RED, BLUE, YELLOW, 
  469.           LIGHT RED, DARK GREY, LIGHT BLUE, LIGHT GRAY.
  470.     
  471.           ╙OME PEOPLE DEVISED A ╔╥╤ WEDGE THAT WILL RECOVER FROM THE LOCKUP.
  472.     
  473.           ╚AVE THE FOLLOWING LINES AS THE FIRST LINES OF A PROGRAM:
  474.           10 OPEN 15,8,15 20 INPUT#15,A$.
  475.     3) ╘HERE ARE ACTUALLY TWO WAYS TO RECOVER.  ╘HEY ARE:
  476.     
  477.           ╔F YOU HAVE A RESET BUTTON INSTALLED ON THE 64, RESET THE MACHINE,
  478.           THEN LOAD AND RUN AN UNNEW PROGRAM.  (╔ ACCEPTED THIS, BUT ╔ FIGURED
  479.           MOST PEOPLE WOULD ASSUME THIS MUCH)
  480.     
  481.           ╔F YOU HAVE A TAPE DRIVE INSTALLED, PRESS EITHER ╙HIFT-3 OR MOVE A
  482.           JOYSTICK INSTALLED IN ╨ORT 1 IN THE ╒╨ DIRECTION.  ╘HEN, RESPOND TO
  483.           THE DIRECTIONS ON THE SCREEN "╨╥┼╙╙ ╨╠┴┘ ╧╬ ╘┴╨┼". ╬EXT, PRESS
  484.           ╥╒╬-╙╘╧╨ TO STOP THE TAPE LOAD. 
  485.     
  486.  
  487.     ╫HAT REALLY HAPPENS: (╔ CAN'T PROVE THIS)
  488.     
  489.     1) ╘HE USER TYPES THE LINE OF TEXT AND THE SCROLL CODE IS INVOKED.
  490.        ╘HE FIRST TWO LINES BECOME LINKED AS ONE LOGICAL LINE, AND THE
  491.        THIRD LINE IS TREATED AS A NEW LINE. 
  492.     
  493.        ╘HE USER DELETES THE 82ND AND THE 81ST CHARACTER AND THEN HITS DELETE
  494.        WHILE IN THE FIRST COLUMN OF THE THIRD LINE.  ╙INCE THE DELETE WILL PUT
  495.        THE CURSOR BACK UP INTO THE SECOND LINE, WHICH IS LINKED WITH THE FIRST,
  496.        THE ╦┼╥╬┴╠ GETS CONFUSED AND THINKS THE SECOND LINE IS AT THE BOTTOM OF
  497.        THE SCREEN. ╥EMEMBER, THE "CURSOR" IS ACTUALLY CONSTRUCTED BY A
  498.        COMBINATIONS OF USING REVERSE CHARACTERS AND CHANGING THE COLOR ╥┴═
  499.        NYBBLE FOR THAT SCREEN LOCATION.  ╘HUS, WHEN THE CURSOR GETS "ERASED"
  500.        FROM THE FIRST COLUMN OF THE LAST LINE, THE ╦┼╥╬┴╠ THINKS THE COLOR
  501.        NYBLE FOR IT IS AT $─├00, WHICH IS 40 BYTES OFF FROM THE ACTUAL
  502.        POSITION.  $─├00 IS ACTUALLY ╨ORT ┴ FOR ├╔┴ #1, WHICH IS WHERE THE
  503.        KERNAL WRITES THE COLUMN OF THE KEYBOARD IT WISHES TO SCAN. ┬ECAUSE THE
  504.        ╦┼╥╬┴L IS MESSED UP, IT PUTS THE COLOR NYBBLE FOR WHERE IT THINKS THE
  505.        CURSOR WAS INTO THIS LOCATION. (╘HAT IS WHY THERE IS A CONNECTION
  506.        BETWEEN CURSOR COLOR AND THIS BUG.  
  507.     
  508.        ╬OW, THE SYSTEM INTEGRITY HAS BEEN COMPROMISED, BUT IT DOES NOT SHOW
  509.        YET.  ╘HE USER PROCEEDS TO DELETE THE 80TH CHARACTER.  ┴S THE USER
  510.        DELETES THE 79TH CHARACTER, THE BAD VALUE IN $─├00 GOES TO WORK AND
  511.        FOOLS THE ╦┼╥╬┴L INTO THINKING ╙╚╔╞╘/╥╒╬-╙╘╧╨ HAS BEEN PRESSED.  ╔T ALSO
  512.        PRETTY MUCH DISABLES THE KEYBOARD.  
  513.     
  514.     2) ╙INCE THE ├OLOR ╥┴═ IS WHAT THE ╦┼╥╬┴L GETS CONFUSED ABOUT, THE SOLUTION
  515.        WAS TO NOT USE CERTAIN BIT PATTERNS OF COLORS:
  516.     
  517.           ╥┼─         0010
  518.           ├┘┴╬        0011
  519.           ┬╠╒┼        0110
  520.           ┘┼╠╠╧╫      0111
  521.           ╠╔╟╚╘ ╥┼─   1010
  522.           ─┴╥╦ ╟╥┴┘   1011
  523.           ╠╔╟╚╘ ┬╠╒┼  1110
  524.           ╠╔╟╘ ╟╥┴┘   1111
  525.     
  526.           ╧╦ ├OLORS:
  527.     
  528.           ┬╠┴├╦       0000
  529.           ╫╚╔╘┼       0001
  530.           ╨╒╥╨╠┼      0100
  531.           ╟╥┼┼╬       0101
  532.           ╧╥┴╬╟┼      1000
  533.           ┬╥╧╫╬       1001
  534.           ═┼─╔╒═ ╟╥┴┘ 1100
  535.           ╠╔╟╚╘ ╟╥┼┼╬ 1101
  536.  
  537.           ┴LL OF THE ┬┴─ COLORS HAVE BIT 1 SET.  ╔ HAVE NO IDEA WHAT THE
  538.           SIGNIFICANCE OF THAT IS.
  539.  
  540.     3) ┘OU NEEDED TO GET OUT OF THE TAPE LOAD CODE, BUT YOU ONLY HAD SO MANY
  541.        KEYS THAT WERE STILL ACTIVE.  ╙O, IF YOU FOLLOWED THE DIRECTIONS ON
  542.        THE SCREEN, YOU COULD BREAK OUT.  ╙INCE THE TAPE LOAD CODE USES ├╔┴ #1
  543.        FOR ITS OPERATIONS, IT WOULD TAKE OVER THE ╔├ AND THEN RESTORE IT
  544.        TO A CORRECT STATE WHEN EITHER THE LOAD WAS STOPPED OR THE LOAD
  545.        COMPLETED.  ╬OW, THAT IS AMAZING!
  546.  
  547.        (╙OMEONE IS FREE TO CHECK UP ON ME CONCERNING THIS, SINCE ╔ DO NOT
  548.         HAVE A ╥EV 1 ╥╧═ TO TRY OUT.  ╔F SOMEONE HAS ONE, ╔ WOULD LIKE TO
  549.         HAVE A COPY OF IT ON DISK OR IN EMAIL.  ┴ND IF SOMEONE HAS THE
  550.         INFORMATION ON THIS BUG FROM EITHER THE ═AY 1984 ╟AZETTE P108, OR
  551.         FROM THE ├╧═╨╒╘┼! ╘OOLKIT ╦ERNAL ╓╔├20/64, ╔ WOULD LIKE A COPY.)
  552.  
  553.  
  554. ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #4 FOR ╞EBRUARY, 1994.
  555.  
  556.  
  557. ╤ $030) ╧N A ├OMMODORE 64, WHAT IS THE AMOUNT OF ╥┴═ AVAILABLE FOR ┬┴╙╔├
  558.         PROGRAMS TO RESIDE IN?
  559.  
  560. ┴ $030) ╙OME PEOPLE OVER-ANSWERED THIS QUESTION.  ╘HE CORRECT ANSWER IS
  561.         38911 BYTES, WHICH IS WHAT THE ┬┴╙╔├ SCREEN SAYS.  ╬OW, IT IS TRUE
  562.         THAT ┬┴╙╔├ CAN USE $├000-$├╞╞╞, AND SOME ZERO PAGES IS EASILY USED
  563.         BY ┬┴╙╔├, BUT IT IS NON-TRIVIAL TO GET ┬┴╙╔├ TO USE THESE AREAS.
  564.         ╘HE MATH COMES OUT TO:  $0801 (2048) TO $9╞╞╞ (40959) - 1 (0 IN
  565.         LOCATION 2048).  ╨LEASE NOTE THAT THIS IS NOT THE MAXIMUM SIZE OF
  566.         A STANDARD ┬┴╙╔├ PROGRAM, EVEN IF IT DOES NOT USE VARIABLES, SINCE
  567.         ┬┴╙╔├ STEALS 3 BYTES AT THE END OF THE PROGRAM TO DETERMINE THE END.
  568.  
  569. ╤ $031) ╬AME ONE ├OMMODORE COMPUTER (PRE-┴MIGA) THAT USED TWO GENERAL PURPOSE
  570.         MICROPROCESSORS?
  571.  
  572. ┴ $031) ╘HERE ARE TWO (OR MORE) ANSWERS TO THIS QUESTION.  ╘HE OBVIOUS ANSWER
  573.         IS THE ├OMMODORE 128, BUT THE ├OMMODORE ╙UPER╨┼╘ (╙╨9000) HAD TWO,
  574.         ALSO.  ╘HERE WAS ALSO AN OPTIONAL CARD TO ADD ANOTHER PROCESSOR TO
  575.         THE ┬-SERIES.  ╬OTE THAT SOME ├OMMODORE PERIPHERALS ALSO HAD TWO
  576.         (OR MORE) MICROPROCESSORS, BUT THAT IS ANOTHER QUESTION.
  577.  
  578. ╤ $032) ╫HAT ARE THEY?
  579.  
  580. ┴ $032) ├OMMODORE 128: 8502(6510 CLONE) AND ┌80.  ╙UPER╨┼╘: 6502 AND 6809.
  581.         ┬-SERIES: 6509 AND 8088.
  582.  
  583. ╤ $033) ╫HO WAS THE ├HIEF ┼XECUTIVE ╧FFICER OF ├┬═ WHEN THE ├OMMODORE ╓╔├-20
  584.         (╓├-20) WAS INTRODUCED?
  585.  
  586. ┴ $033) ┴CCORDING TO MY SOURCES, IT IS NONE OTHER THAN ╩ACK ╘RAMIEL.  ╫HILE
  587.         SOME CLAIM ╔RVING ╟OULD AS THE MAN-IN-CHARGE SINCE HE HAD
  588.         CONTROLLING INTEREST AT THE TIME, THE ├┼╧ WAS ╩ACK.  ╫HETHER HE WAS
  589.         IN CHARGE OR NOT IS LEFT UP TO THE READER.
  590.  
  591. ╤ $034) THE ├OMMODORE 64 AND 128 (AMONG OTHERS) HAVE A ╘╧─ FEATURE.  ╫HAT DOES
  592.         ╘╧─ STAND FOR?
  593.  
  594. ┴ $034) ╘╧─ = ╘IME ╧F ─AY.  ╘HE 6526 ├OMPLEX ╔NTERFACE ┴DAPTER IS THE HOLDER
  595.         OF THE ╘╧─ CLOCK, WHICH CAN BE USED IN LIEU OF THE SYSTEM JIFFY
  596.         SYSTEM CLOCK TO TIME THINGS, AS IT DOES NOT SUFFER FROM INTERRUPTIONS
  597.         TO SERVICE ╔/╧ AND SCREEN.  ╬OTE THAT THE STANDARD KERNAL USES THE
  598.         SYSTEM CLOCK FOR ╘╔ AND ╘╔$, NOT THE ╘╧─ CLOCK.
  599.  
  600. ╤ $035) ╫HAT LOCATION IN THE ├OMMODORE 64 ╦ERNAL HOLDS THE VERSION NUMBER?
  601.  
  602. ┴ $035) $FF80 (65408).
  603.  
  604. ╤ $036) ╘HE FIRST COMPUTER ├OMMDORE SOLD WAS THE ╦╔═-1.  ╚OW MUCH ╥┴═ WAS
  605.         AVAILABLE ON THE ╦╔═-1?
  606.  
  607. ┴ $036) 1.125╦ OR 1024+128 = 1152 BYTES.
  608.  
  609. ╤ $037) ╫HO DESIGNED THE ARCHITECTURE FOR THE 6502 INTEGRATED CIRCUIT?
  610.  
  611. ┴ $037) ├HUCK ╨EDDLE
  612.  
  613. ╤ $038) ╫HAT WAS THE ORIGINAL NAME OF THE COMPANY THAT PRODUCED THE 6502?
  614.  
  615. ┴ $038) ═╧╙ ╘ECHNOLOGIES
  616.  
  617. ╤ $039) ╫HAT DID THE NAME STAND FOR?
  618.  
  619. ┴ $039) ═╧╙ = ═ETAL ╧XIDE ╙EMICONDUCTOR, WHICH HAS THREE MAJOR FAMILIES:
  620.         ╬═╧╙: ╬EGATIVE ═╧╙, ╨═╧╙: ╨OSITIVE ═╧╙, AND ├═╧╙: ├OMPLEMENTARY ═╧╙.
  621.         ═╧╙ ╘ECHNOLOGIES PRODUCED MAINLY ╬═╧╙ ╔├S, HENCE THE USE OF ╬═╧╙
  622.         TECHNOLOGY FOR THE 6502 AND 6510.
  623.  
  624. ╤ $03┴) ├OMMODORE ACQUIRED THE COMPANY AND RENAMED IT TO...?
  625.  
  626. ┴ $03┴) ├╙╟ = ├OMMODORE ╙EMICONDUCTOR ╟ROUP.  ╘HE RENAMING WAS NOT
  627.         INSTANTANEOUS, HAPPENING A NUMBER OF MONTHS(YEARS) AFTER THE
  628.         ACQUISITION.
  629.         
  630. ╤ $03┬) ╘HE ├OMMODORE ╓╔├-20 GRAPHICS WERE POWERED BY THE ╓╔├-╔ (6560)
  631.         INTEGRATED CIRCUIT.  ╫AS THE CHIP DESIGNED FOR THE COMPUTER, OR WAS
  632.         THE COMPUTER DESIGNED FOR THE CHIP?
  633.  
  634. ┴ $03┬) ╘HE ╓╔├-╔ 6560-61, WAS DESIGNED 2 YEARS PRIOR TO THE DESIGN OF THE
  635.         ╓╔├-20 COMPUTER.  ╔T WAS DESIGNED TO BE BUILT INTO VIDEO GAMES, BUT
  636.         NO ONE WANTED TO USE IT, SO ├OMMODORE MADE THEIR OWN SYSTEM
  637.         AROUND IT TO RECOUP LOSSES.
  638.  
  639. ╤ $03├) ╘HE ╓╔├-20 HAD A ╓IDEO ╔NTERFACE ├HIP (╓╔├) INSIDE IT, YET THAT WAS
  640.         NOT WHAT THE '╓╔├' IN THE MODEL NAME EXPANDED TO.  ╫HAT DID IT
  641.         EXPAND TO?
  642.  
  643. ┴ $03├) ╓╔├-20 = ╓IDEO ╔NTERFACE ├OMPUTER-20.  ╘HE 20 WAS A ROUNDING DOWN
  644.         OF THE AMOUNT OF MEMORY IN THE ╓╔├: ▐22╦.  ═ICHAEL ╘OMCZYK, WHO GOT
  645.         STUCK WITH THE JOB OF DECIDING ON THE NAME, DID THE ROUNDING.
  646.  
  647. ╤ $03─) ╘HE MOST WIDELY KNOWN DISK DRIVE FOR ├OMMODORE COMPUTERS IS THE 1541.
  648.         HOW MUCH ╥┴═ DOES THE 1541 HAVE?
  649.  
  650. ┴ $03─) 2048 BYTES, OR 2K┬ ╥┴═. ╔T IS MAPPED AT $0000-$07╞╞.
  651.  
  652. ╤ $03┼) ╧N EVERY ├OMMODORE DISK, THE DRIVE STORES A COPY OF THE ┬┴═.  ╫HAT
  653.         DOES ┬┴═ STAND FOR?
  654.  
  655. ┴ $03┼) ┬┴═ = ┬LOCK ┴LLOCATION ═AP, OR ┬LOCK ┴VAILABILITY ═AP.  ╔ AM CHECKING
  656.         SOURCES TO FIGURE OUT WHICH ONE IS THE REAL ═C├OY.
  657.  
  658. ╤ $03╞) ╬OW, FOR THOSE INTO 6502 MACHINE LANGUAGE.  ╫HAT INSTRUCTION WAS NOT
  659.         AVAILABLE ON THE FIRST 6502 CHIPS?
  660.  
  661. ┴ $03╞) ╥╧╥ (╥╧TATE ╥IGHT) WAS NOT AVAILABLE UNTIL AFTER ╩UNE, 1976.  ╚OWEVER,
  662.         ALL ├OMMODORE ╓╔├S AND ├64S SHOULD HAVE THIS INSTRUCTION.  ╙OME PEOPLE
  663.         GAVE INSTRUCTIONS THAT ARE FOUND ON THE 65C02, DESIGNED BY ╫ESTERN
  664.         ─ESIGN ├ENTER, AND LICENSED TO MANY COMPANIES.  ╚OWEVER, THE 65C02
  665.         ITSELF OCCURS IN TWO FLAVORS, AND NEITHER ARE USED IN ANY STOCK
  666.         ├OMMODORE PRODUCT ╔ KNOW OF.
  667.  
  668.  
  669. ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #5 FOR ┴PRIL, 1994.
  670.  
  671.  
  672. ╤ $040) ╘HE COMPANY THAT PRODUCES ╘HE ┬IG ┬LUE ╥EADER, A PROGRAM THAT ALLOWS
  673.         READING AND WRITING OF ╔┬═ FORMATTED DISK IN 1571S AND 1581S, IS
  674.         CALLED ╙╧╟╫┴╨.  ╫HAT DOES ╙╧╟╫┴╨ STAND FOR?
  675.  
  676. ┴ $040) ╙ON ╧F ╟OD ╫ITH ┴LL ╨OWER.  ╘HEY ALSO MARKET THE ┬IBLE ON DISKETTES.
  677.  
  678. ╤ $041) ╫HAT VERSION OF ─╧╙ DOES THE ├OMMODORE 8280 8 INCH DUAL DRIVE HAVE?
  679.  
  680. ┴ $041) ╘HE 8280 HAS VERSION 3.0.  ═ANY HAVE NOT EVER SEEN THIS ╔┼┼┼-488
  681.         COMPATIBLE DRIVE USED ON SOME ╨┼╘S.  ╔T HAS THE SAME ─╧╙ VERSION
  682.         THAT IS IN THE ─90╪╪ HARD DRIVES, AND COULD READ 250K┬ AND 500K┬
  683.         ╔┬═ FORMATTED DISKS, AS WELL AS SOME ├╨/═ FORMATS.  ╬OTE THAT ALTHOUGH
  684.         THIS VERSION NUMBER IS USED ON THE 1570/71 DISK DRIVES, THE CODE IS
  685.         DIFFERENT.
  686.  
  687. ╤ $042) ╫HAT WAS THE COLOR OF THE ORIGINAL ├OMMODORE 64 CASE?
  688.  
  689. ┴ $042) ╙OME EARLY VERSIONS OF THE ├OMMODORE 64 WERE HOUSED IN ╓╔├-20 COLOR
  690.         CASES, SO OFF-WHITE IS THE CORRECT ANSWER.
  691.         
  692. ╤ $043) ╧N AN UNEXPANDED ├OMMODORE 64, HOW DOES ONE READ THE ╥┴═
  693.         LOCATIONS $00 AND $01?
  694.  
  695. ┴ $043) ╫ELL, YOU CANNOT DO SO WITH THE ├╨╒ DIRECTLY, SINCE IT RESOLVES THESE
  696.         LOCATIONS INTO INTERNAL ADDRESSES.  ╚OWEVER, THE ╓╔├ ╔╔ CAN SEE THESE
  697.         ADDRESSES AS EXTERNAL MEMORY.  ╙O, JUST MAKE ONE SPRITEXS WITH THE
  698.         FIRST BIT IN THE SPRITE SET, AND MOVE IT OVER THE FIRST TWO BYTES, 
  699.         PRETENDING THEY ARE PART OF A BITMAP.  ┬Y CHECKING THE SPRITE-TO-
  700.         BACKGROUND COLLISION REGISTER, YOU CAN TELL IF THE BIT IN THE BYTE IS
  701.         SET.  ┼MAIL ME FOR A MORE COMPLETE DESCRIPTION. 
  702.         
  703.         ╙VEN ╟OLDT AND ═ARKO ═AKELA GET CREDIT FOR THIS ANSWER AND THE NEXT.
  704.  
  705. ╤ $044) ╧N AN UNEXPANDED ├OMMODORE 64, HOW DOES ONE WRITE THE SAME LOCATIONS?
  706.  
  707. ┴ $044) ╔T SEEMS THE 6510 GENERATES A VALID ╥/╫ SIGNAL ANY TIME IT DOES AN 
  708.         INTERNAL READ OR WRITE.  ╘HIS IS TO BE EXPECTED, SINCE THE 6510
  709.         INTERNAL REGISTERS WERE GRAFTED ONTO A 6502 CORE PROCESSOR.  
  710.         ╚OWEVERE, THE ADDRESS LINES ARE ALSO VALID DURING ANY INTERNAL READ
  711.         OR WRITE, SINCE FAILURE TO DO SO MAY WRITE THE DATA ON THE DATA BUS
  712.         TO SOME INVALID ADDRESS.  ╘HE DATA ON THE BUS, HOWEVER, COMES NOT FROM
  713.         THE ├╨╒, BUT FROM RESIDUAL EFFECTS OF THE DATA LAST READ OF WRITTEN BY
  714.         THE ╓╔├ CHIP.  ╘HUS, BY PROGRAMMING THE ╓╔├ CHIP TO READ DATA FROM
  715.         SOME KNOWN LOCATION, AND BY PLACING RELEVANT DATA IN THAT LOCATION, A
  716.         WRITE TO LOCATION $00 OR $01 WILL PLACE THE DATA FROM THAT LAST READ
  717.         ╓╔├ LOCATION INTO $00 OR $01.  ╘HIS IS USUALLY ACCOMPLISHED BY PLACING
  718.         THE DATA TO BE WRITTEN OUT INTO LOCATION $3FFF, WHICH THE ╓╔├ FETCHES
  719.         DURING THE TIME THE BORDER IS BEING DISPLAYED.  ┬Y TRIGGERING A
  720.         ROUTINE WHEN THE RASTER HITS THE BOTTOM BORDER, YOU CAN COPY LOCATION
  721.         $3FFF TO $00 OR $01.
  722.  
  723. ╤ $045) ╫HAT IS '├┬2 ╙OUND', AND ON WHAT COMPUTERS WAS IT POPULAR?
  724.  
  725. ┴ $045) ╘HIS IS THE SOUND MADE BY SENDING SQUARE OUT OF THE 6522 ╔├ ON SOME
  726.         ├OMMODORE COMPUTERS.  ╔T IS CALLED '├┬2', SINCE THAT IS THE NAME OF
  727.         THE PIN ON THE 6522 THAT OUTPUTS THE WAVEFORM.  ╔ WON'T GO INTO A
  728.         COMPLETE DESCRIPTION, EXCEPT TO SAY THAT MOST MODELS OF THE ╨┼╘
  729.         HAD THE CAPABILITY, AND MOST ╨┼╘ OWNERS USED IT AS THE ╧╬╠┘ SOUND
  730.         SOURCE, SINCE THE ╨┼╘S DID NOT HAVE A SOUND CHIP.  ┴LTHOUGH THE ╓╔├
  731.         DID HAVE SOME SOUND CAPABILITIES, BY THAT TIME ├OMMODORE HAD 
  732.         REALIZED ITS WIDESPREAD USE AND INCLUDED SOME INFORMATION ON IT IN
  733.         THE ├OMMODORE ╓╔├-20 ╨ROGRAMMER'S ╥EFERENCE ╟UIDE.  ╞OR MORE INFO,
  734.         REACH FOR YOUR NEAREST ╓╔├ ╨╥╟ AND LOOK AT PAGE 232.
  735.  
  736. ╤ $046) IN QUESTION $021, THE ┬ATTERIES ╔NCLUDED LOGO DESCRIPTION WAS ASKED
  737.         FOR.  ╬OW, WHAT IS THE NAME OF THE MAN IN THE LOGO?
  738.  
  739. ┴ $046) "╚ERBIE"  ╩IM ┬UTTERFIELD SUPPLIED ME WITH THIS ONE.
  740.  
  741. ╤ $047) ╫HY WAS THE ├OMMODORE ╓╔├-20 PRODUCED WITH SO MANY 1╦ CHIPS IN IT?
  742.         (╚INT: IT HAD LITTLE TO DO WITH THE COST OF ╙╥┴═ AT THE TIME)
  743.  
  744. ┴ $047) ╩ACK (╘RAMIEL) DECREED THAT ├OMMODORE HAD A SURPLUS OF 1╦ CHIPS,
  745.         SO HE DIDN'T CARE HOW MUCH MEMORY IT HAD, AS LONG AS THE DESIGNERS
  746.         USED 1╦ ╙╥┴═S.
  747.  
  748. ╤ $048) ╫HAT DOES ┴─╙╥ STAND FOR?
  749.  
  750. ┴ $048) ┴─╙╥ = ┴TTACK, ─ECAY, ╙USTAIN, ╥ELEASE.  ╘HESE ARE THE FOUR VALUES
  751.         SPECIFIED TO DEFINE A ╙╔─ WAVEFORM ENVELOPE.
  752.  
  753. ╤ $049) ╔N QUESTION $035, IT WAS LEARNED THAT THE ├OMMODORE 64 KERNAL
  754.         REVISION NUMBER IS STORED AT $FF80 (65408).  ╬OW, WHAT IS THE NUMBER
  755.         STORED THERE FOR:
  756.  
  757.         A) ╘HE FIRST REVISION?
  758.         B) ╘HE ╨┼╘64 (4064)?
  759.  
  760. ┴ $049) A) 170. (┘EP, THIS WAS PRIOR TO 0!)
  761.         B) 100. (╘HE ╨┼╘ 64 USES THIS VALUE TO ADJUST THE STARTUP LOGO
  762.                  ACCORDINGLY.)
  763.  
  764. ╤ $04┴) ╫HO WAS THE MASTERMIND BEHIND THE ORIGINAL ├OMMODORE ╦ERNAL?
  765.  
  766. ┴ $04┴) ╩OHN ╞EAGAN.  ╚E HAD INTENDED IT TO PROVIDE UPWARD COMPATIBILITY
  767.         FOR FUTURE COMPUTER SYSTEMS.  ╒NFORTUNATELY, THE KERNAL WAS
  768.         MODIFIED ENOUGH WITH EACH NEW COMPUTER SYSTEM, THAT THE IDEA OF
  769.         COMPATIBILITY NEVER REALLY SURFACED.  ╙TILL, IT WAS A NICE TRY.
  770.  
  771. ╤ $04┬) ╫HO DESIGNED THE FIRST ╓╔├ PROTOTYPE?
  772.  
  773. ┴ $04┬) ╘HERE ARE TWO ANSWERS TO THIS QUESTION.  ┴T THE TIME, THE ╓╔├ HAD NO
  774.         NAME AND WAS CALLED THE ═ICRO╨┼╘ OR ╬O ╬AME ├OMPUTER.  ╩ACK ╘RAMIEL
  775.         WANTED TO SHOW SOME PROTOTYPES OF THE ╓╔├ AT THE 1980 ├OMSUMER
  776.         ┼LECTRONICS ╙HOW (├┼╙).  ╘HE FUNNY THING IS, HE GOT NOT ONE
  777.         PROTOTYPE, BUT ╘╫╧.  ┬OB ┘ANNES, WORKING AGAINST TIME, HAD HACKED
  778.         TOGETHER A MINIMAL WORKING PROTOTYPE USING SPARE ╨┼╘/├┬═ PARTS.
  779.         ┴NOTHER PROTOTYPE, BROUGHT TO THE SHOW BY ┬ILL ╙EILER AND ╩OHN
  780.         ╞EAGANS, HAD BEEN PUT TOGETHER AFTER SOME PRELIMINARY DISCUSSIONS
  781.         WITH ┘ANNES.
  782.  
  783. ╤ $04├) ╚OW MANY PINS DOES A ├OMMODORE 1525 PRINTHEAD HAVE IN IT?
  784.  
  785. ┴ $04├) ╘RICK ╤UESTION.  ╘HE TWO 1525 PRINTERS ╔ HAVE SHOW THAT THE 1525 
  786.         PRINTHEAD HAS BUT ONE PIN.  ╘HE SEVEN DOTS ARE CREATED BY A REVOLVING
  787.         7 SIDED STAR-WHEEL FOR THE PLATEN, WHICH PRESSES THE PAPER AGAINST THE
  788.         PRINTHEAD IN THE SEVEN DIFFERENT DOT LOCATIONS.
  789.  
  790. ╤ $04─) ╫HY DOES MENTIONING A ╨┼╘ COMPUTER IN ╞RANCE MAKE PEOPLE CHUCKLE?
  791.  
  792. ┴ $04─) ╨┼╘ MEANS "╞┴╥╘" THERE.
  793.  
  794. ╤ $04┼) ╫HAT INTERFACE ╔├ IS USED TO DRIVE THE ╔┼┼┼-488 BUS IN A ╨┼╘ COMPUTER?
  795.  
  796. ┴ $04┼) ┴ 6520.  ╔T IS APPROPRIATELY CALLED A ╨╔┴ (╨ERIPHERAL ╔NTERFACE
  797.         ┴DAPTER).
  798.  
  799. ╤ $04╞) ╫HAT WAS THE PRIMARY REASON ├OMMODORE WENT TO A SERIAL BUS WITH THE
  800.         INTRODUCTION OF THE ╓╔├-20?
  801.  
  802. ┴ $04╞) ╩IM ┬UTTERFIELD SUPPLIED ME WITH THIS ONE:
  803.  
  804.         ┴S YOU KNOW, THE FIRST ├OMMODORE COMPUTERS USED THE ╔┼┼┼ BUS TO
  805.         CONNECT TO PERIPHERALS SUCH AS DISK AND PRINTER.  ╔ UNDERSTAND THAT
  806.         THESE WERE AVAILABLE ONLY FROM ONE SOURCE:  ┬ELDEN CABLES.  ┴
  807.         COUPLE OF YEARS INTO ├OMMODORE'S COMPUTER CAREER, ┬ELDEN WENT OUT
  808.         OF STOCK ON SUCH CABLES (MILITARY CONTRACT? WHO KNOWS?).  ╔N ANY
  809.         CASE, ├OMMODORE WERE IN QUITE A FIX:  THEY MADE COMPUTERS AND DISK
  810.         DRIVES, BUT COULDN'T HOOK 'EM TOGETHER! ╙O ╘RAMIEL ISSUED THE
  811.         ORDER:  "╧N OUR NEXT COMPUTER, GET OFF THAT BUS.  ═AKE IT A CABLE
  812.         ANYONE CAN MANUFACTURE".  ┴ND SO, STARTING WITH THE ╓╔├-20 THE
  813.         SERIAL BUS WAS BORN.  ╔T WAS INTENDED TO BE JUST AS FAST AS THE
  814.         ╔┼┼┼-488 IT REPLACED.  
  815.         
  816.         ┴ND IT WOULD HAVE BEEN, EXCEPT DOR ONE SMALL GLITCH.  ┬UT THAT IS
  817.         ANOTHER TRIVIA QUESTION.
  818.  
  819.  
  820. ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #6 FOR ═AY, 1994.
  821.  
  822.  
  823. ╤ $050) ╘HE ├OMMODORE 1551 ─ISK ─RIVE IS A PARALLEL DEVICE.  ╚OW DID IT
  824.         CONNECT TO THE ├OMMODORE ╨LUS/4 AND ├16?
  825.         
  826. ┴ $050) ╘HE ├OMMODORE 1551 CONNECTED VIA THE EXPANSION PORT.  ╘HEREFORE, IT
  827.         WAS A PARALLEL DEVICE, AND COULD WORK AT MUCH FASTER SPEEDS.
  828.  
  829. ╤ $051) ╚OW MANY COULD YOU ATTACH?
  830.  
  831. ┴ $051) ╘WO, ╘HE SECOND DRIVE CABLE ATTACHED TO THE BACK OF THE FIRST CABLE.
  832.         
  833. ╤ $052) ╫HAT WERE THE ADDRESSES THEY USED? (╬OT DEVICE NUMBERS)
  834.  
  835. ┴ $052) ╘HE TWO DRIVES WERE MAPPED INTO THE ┴DDRESS SPACE AT $FEC0 AND $FEF0
  836.         OF THE ╨LUS/4 OR ├-16.  ╘HE 6523 ╘RIPLE ╔NTERFACE ┴DAPTOR CHIP IS
  837.         MAPPED IN AT THESE LOCATIONS AND HAS 8 REGISTERS EACH.
  838.         
  839. ╤ $053) ╫HAT IS THE MAXIMUM NUMBER OF SOUND OCTAVES THE ╓╔├-20 SOUND GENERATOR
  840.         CAN REACH?
  841.  
  842. ┴ $053) ╘HIS HAS TWO EQUALLY VALID ANSWERS. ╧N THE ╓IC-20, EACH SOUND 
  843.         GENERATOR HAS A RANGE OF 3 OCTAVES.  ╚OWEVER, ALL THE SOUND GENERATORS
  844.         TOGETHER CAN RANGE 5 OCTAVES, SINCE EACH SOUND GENERATOR IS STAGGERED
  845.         ONE OCTAVE APART.
  846.         
  847. ╤ $054) ╫HO WROTE THE REFERENCE GUIDE THAT WAS DISTRIBUTED WITH ALMOST EVERY
  848.         ╨┼╘ COMPUTER SOLD?
  849.  
  850. ┴ $054) ╘HE INFAMOUS ┴DAM ╧SBORNE, OF ╧SBORNE ╔ FAME.
  851.         
  852. ╤ $055) ╘HE BOX THAT THE ├64 COMES IN HAS SOME PROPAGANDA ON THE SIDE
  853.         DESCRIBING THE UNIT.  ╔N THE SPECIFICATIONS SECTION, IT CLAIMS HOW
  854.         MANY SPRITES CAN BE ON SCREEN AT ONE TIME?
  855.  
  856. ┴ $055) ╔ NEGLECTED TO NOTE THAT THE ├OMMODORE 64 PACKING BOX HAS UNDERWENT
  857.         MANY CHANGES.  ╚OWEVER, FOR QUITE A WHILE, ├┬═ USED A BLUE BOX WITH
  858.         MANY VIEWS OF THE 64, AND A SPECIFICATION LIST ON ON SIDE OF THE BOX.
  859.         ╧N THAT SPEC LIST, IT CLAIMS THAT THE THE 64 CAN HAVE "256 
  860.         INDEPENDENTLY CONTROLLED OBJECTS, 8 ON ONE LINE."  ╫HY IS THIS
  861.         IMPORTANT?  ╔T GIVES US A CLUE THAT THE ╓╔├-╔╔ DESIGNERS FIGURED PEOPLE
  862.         WOULD AND COULD USE THE INTERRRUPTS ON THE ╓╔├-╔╔ TO CHANGE SPRITE
  863.         POINTERS.
  864.         
  865. ╤ $056) ╘HE ├OMMODORE ╨LUS/4 COMPUTER CONTAINED THE FIRST INTEGRATED SOFTWARE
  866.         PACKAGE TO BE PLACED IN A PERSONAL COMPUTER.  ╫HAT WAS THE NAME OF THE
  867.         SOFTWARE PACKAGE?
  868.  
  869. ┴ $056) ╘HE PACKAGE WAS CALLED "3+1".
  870.         
  871. ╤ $057) ╫HAT POPULAR COMPUTER SOFTWARE DID THE SOFTWARE PACKAGE PARODY?
  872.  
  873. ┴ $057) ╠OTUS 1-2-3.
  874.         
  875. ╤ $058) ╧NE FAMILIAR ├OMMODORE PORTABLE COMPUTER WAS CALLED THE ╙╪-64.
  876.         ╫HAT DID ╙╪ REALLY STAND FOR?
  877.  
  878. ┴ $058) ─EPENDING ON WHOM YOU BELIEVE, THE ╙╪ STANDS FOR TWO THINGS.  ╔F YOU
  879.         CHOOSE TO BELIEVE ╩ACK ╘RAMIEL, THE ╙╪ STANDS FOR "SEX", SINCE ╩ACK
  880.         HAS BEEN QUOTED AS SAYING, "┬USINESS IS LIKE SEX, ┘OU HAVE TO BE
  881.         INVOLVED".  ╘HIS IS A PLAUSIBLE ANSWER, AS ╩ACK USUALLY PICKED THE
  882.         NAMES OF THE COMPUTERS.  ╚OWEVER, IF YOU DON'T BUY THAT, HERE IS THE 
  883.         MARKETING VERSION.  ╙╪ STANDS FOR ╙INGLE ─RIVE ┼XECUTIVE, AS THE 
  884.         PORTABLE 64 WAS CALLED THE ┼XECUTIVE 64.  ╘HERE WAS TO HAVE BEEN A ─╪
  885.         MODEL, WHICH WOULD HAVE HAD TWO DRIVES.  ┘OU DECIDE.
  886.         
  887. ╤ $059) ╫HO (WHAT PERSON) INVENTED THE ╙OUND ╔NTERFACE ─EVICE (╙╔─) CHIP?
  888.  
  889. ┴ $059) ┬OB ┘ANNES, WHO ALSO WORKED ON ONE OF THE ╓╔├ PROTOTYPES, DEVELOPED
  890.         THIS CHIP.
  891.         
  892. ╤ $05┴) ╘HE ILL-FATED ╒LTI═AX (LATER CALLED THE ═┴╪ ═ACHINE) CONTAINED A
  893.         NUMBER OF ├OMMODORE 64 FEATURES.  ╚OWEVER, IT DID NOT SHARE THE 64'S
  894.         FEATURE OF 64K┬ ╥┴═.  ╚OW MUCH ╥┴═ DID THE ═┴╪ HAVE?
  895.  
  896. ┴ $05┴) ┴ WHOPPING 2 KILOBYTES.  ╔F YOU PLUGGED IN THE ┬┴╙╔├ CARTRIDGE, 
  897.         MEMORY DROPPED TO .5 KILOBYTE OR 512 BYTES.  ╬O WONDER ├┬═ SCRAPPED
  898.         THIS ONE.
  899.         
  900. ╤ $05┬) ╫HAT FAMOUS PERSON WAS FEATURED IN ╒.╙. TELEVISION ADVERTISING FOR
  901.         THE ╓╔├-20?
  902.  
  903. ┴ $05┬) ╫ILLIAM ╙HATNER.  ┘ES, ├APTAIN ╩AMES ╘. ╦IRK HIMSELF DID THE ADS.
  904.         ╚E WAS NOT, HOWEVER, IN UNIFORM, SINCE ├┬═ DID NOT HAVE RIGHTS TO
  905.         ╙TAR ╘REK OF ANY SORT.
  906.         
  907. ╤ $05├) ╫HAT COMPANY DESIGNED THE FIRST ╓╔├═ODEM?
  908.  
  909. ┴ $05├) ┴NCHOR ┴UTOMATION.  ╙OMETIMES CALLED THE "═OST ╔NEXPENSIVE ═ODEM", 
  910.         THE ╓╔├═ODEM WAS DESIGNED TO BE SOLD FOR UNDER $100 WHEN MOST WERE
  911.         $400 OR MORE.  ╘HE SECRET TO THE COST CONTAINMENT WAS THE ABILITY TO 
  912.         USE WHAT WE SOETIMES THINK OF AS A DISADVANTAGE OF THE ╒SER ╨ORT TO
  913.         THE MODEM'S ADVANTAGE.  ╘HE ╘╘╠ LEVEL ╥╙-232 SIGNALS DID NOT NEED TO
  914.         BE BUFFERED BEFORE DRIVING THE MODEM, AND THE +5 VOLT POWER AVAILABLE
  915.         THROUGH THE ╒SER ╨ORT JUST WAS NOT AVAILABLE THROUGH NORMAL ╥╙-232
  916.         LINES.  ╬OT HAVING THE ALREADY ╘╘╠ LEVEL SIGNALS WOULD HAVE MEANT 
  917.         EXTRA COMPONENTS THAT WOULD HAVE INCREASED CASE SIZE AND COST, AND NOT
  918.         HAVING THE ON-BOARD POWER WOULD HAVE MEANT A POWER CONNECTOR AND POWER
  919.         SUPPLY WOULD NEED TO BE BUNDLED.  ┬EING ONE OF THOSE PEOPLE WHO USED
  920.         THE FIRST ╓╔├═ODEM, ╔ CAN TELL YOU IT WAS WORTH THE HASSLE.
  921.         
  922. ╤ $05─) ┼VERYONE HAS SEEN OR HEARD OF ┬┘╘┼ ═AGAZINE.  ╦NOWN FOR TECHNICAL
  923.         ARTICLES IN THE 80'S, AND COVERAGE OF ╨├ PRODUCTS IN THE 90'S, ┬┘╘┼
  924.         WAS FOUNDED BY ╫AYNE ╟REEN.  ╫HAT ├OMMODORE COMPUTER MAGAZINE DID
  925.         ╫AYNE ╟REEN LATER PUBLISH?
  926.  
  927. ┴ $05─) ╥╒╬ ═AGAZINE.  ┴S OF RIGHT NOW, ├═─ HAS PURCHASED THE RIGHTS TO ╥╒╬.
  928.         
  929. ╤ $05┼) (╘HREE PART QUESTION) ╫HAT ARE THE OFFICIAL NAMES OF THE COLORS
  930.         USED ON THE ╓╔├-20:
  931.  
  932.         A)  CASE?
  933.         B)  REGULAR TYPEWRITER KEYS?
  934.         C)  FUNCTION KEYS?
  935.  
  936. ┴ $05┼) A)  IVORY.
  937.         B)  CHOCOLATE BROWN.
  938.         C)  MUSTARD.
  939.         
  940. ╤ $05╞) ├OMMODORE IS SET UP AS A ___________ CHARTERED COMPANY.  ╬AME
  941.         THE MISSING COUNTRY.
  942.  
  943. ┴ $05╞) ┬AHAMAS.  ─OING SO GAVE ├┬═ A GREAT TAX BREAK.  ╫ITH THE TAX RATE IN
  944.         THE ┬AHAMAS AS LOW AS 1%, MORE MONEY COULD BE KEPT FROM THE 
  945.         GOVERNMENTS.
  946.  
  947.  
  948. ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #7 FOR ═AY, 1994.
  949.  
  950.  
  951. ╤ $060) ╫HEN YOU TURN ON STOCK ├OMMODORE 16, HOW MANY BYTES FREE DOES IT
  952.         REPORT?
  953.  
  954. ┴ $060) ┴CCORDING TO THE INITIAL POWER-UP INDICATION ON THE MONITOR, A STOCK
  955.         ├OMMODORE 16 HAS 12277 BYTES FREE FOR ┬┴╙╔├ PROGRAM USE. ┴ NUMBER OD
  956.         PEOPLE HAVE CALCULATED 12287 BYTES, SO THE POWER-ON MESSAGE MAY BE IN
  957.         ERROR.  ╔ GUESS IT IS TIME TO DIG OUT THE ├-16 AND POWER IT UP.
  958.  
  959. ╤ $061) ╚OW MANY DOES A STOCK ╨LUS/4 REPORT?
  960.  
  961. ┴ $061) ┴CCORDING TO ITS INITIAL POWER-UP MESSAGE, THE ╨LUS/4 HAS 60671
  962.         BYTES FREE.
  963.  
  964. ╤ $062) ╫HAT WAS THE ╓╔├-20'S SUBTITLE?
  965.  
  966. ┴ $062) "╘HE ╞RIENDLY ├OMPUTER"
  967.  
  968. ╤ $063) ╫HAT PERSONALITY ANNOUNCED THE BIRTH OF THE ├OMMODORE 64 IN
  969.         ├HRISTMAS ADVERTISEMENTS?
  970.  
  971. ┴ $063) ╘HOUGH NOT WELL-KNOWN OUTSIDE OF THE ╒╙, ╚ENRY ═ORGAN INTRODUCED THE
  972.         NEW ├OMMODORE 64 COMPUTER SYSTEM IN THE ╒╙.  ╔N OTHER COUNTRIES, THE
  973.         ANSWERS DIFFER, AS COUNTRIES LIKE ╞INLAND HAD THE ╙TATUE OF ╠IBERTY
  974.         ANNOUNCE THE ├64 BIRTH.
  975.  
  976. ╤ $064) ╫HAT WAS THE NAME OF THE MONITOR PROGRAM INCLUDED IN THE ╨LUS/4?
  977.  
  978. ┴ $064) ╘┼─═ON.  ╘┼─, AS YOU KNOW, STOOD FOR ╘EXT ┼DITING ─EVICE.
  979.  
  980. ╤ $065) ╚OW MANY SECTORS PER TRACK ARE THERE FOR TRACKS 1-17 ON A 1541?
  981.  
  982. ┴ $065) 21.
  983.  
  984. ╤ $066) ╘HERE ARE TWO PROGRAMS RUNNING IN THE ├OMMODORE SINGLE-6502 DRIVES
  985.         (1541,1571,1541 ╔╔,1581).  ╫HAT IS THE INTERPRETER PROGRAM CALLED?
  986.  
  987. ┴ $066) ╘HE INTERPRETER PROGRAM IS CALLED THE ╔NTERFACE ╨ROCESSOR (╔╨).  ╔T
  988.         HANDLES THE DISPATCHING OF ALL COMMANDS SENT TO THE DRIVE, AS WELL
  989.         AS CORRDINATING THE FLOW OF TRAFFIC BETWEEN THE DISK AND THE COMPUTER.
  990.  
  991. ╤ $067) ╚OW DO YOU DO A HARD RESET ON A ╨LUS/4 ?
  992.  
  993. ┴ $067) ╞IRST, WE NEED TO DEFINE HARD-RESET.  ┴ RESET DIFFERS FROM A POWER-
  994.         CYCLE, SINCE THE LATTER DOES NOT RETAIN THE ╥┴═ CONTENTS.  ╔N THIS
  995.         CASE, THE ANSWER IS ANALOGOUS TO THE ╥╒╬/╙╘╧╨-╥┼╙╘╧╥┼ COMBINATION
  996.         FOUND ON THE 64 AND ╓╔├-20.  ╚OLD DOWN ╥╒╬/╙╘╧╨ AND ├╘╥╠ AND PRESS THE
  997.         RECESSED RESET BUTTON ON THE SIDE OF THE COMPUTER.  ╔ BELIEVE THIS
  998.         WORKS FOR THE ├-16 AS WELL.
  999.                                     
  1000. ╤ $068) ╫HERE DID THE NAME "├OMMODORE" COME FROM?
  1001.  
  1002. ┴ $068) ╥UMOR HAS IT THAT ╩ACK ╘RAMIEL ALWAYS WANTE TO USE A NAUGHTICAL TERM,
  1003.         BUT MOST HAD BEEN ALREADY USED.  ╚OWEVER, ONE DAY HE WATCHED A MOVING
  1004.         COMPANY VAN PASS BY ON THE STREET WITH THE NAME HE DECIDED TO USE AS 
  1005.         SOON AS HE SAW IT: ├OMMODORE.
  1006.  
  1007. ╤ $069) ├HUCK ╨EDDLE, DESIGNER OF THE 6502, LEFT ├OMMODORE TWICE. ╫HERE DID HE
  1008.         GO FIRST?
  1009.  
  1010. ┴ $069) ╚E WENT TO ┴PPLE ├OMPUTER.  ╚E STAYED WITH THEM BRIEFLY, BUT IT SEEMS
  1011.         THAT ┴PPLE AND ├HUCK GOT ALONG EVEN WORSE THAN ├OMMODORE AND ├HUCK.
  1012.  
  1013. ╤ $06┴) ╫HERE DID HE EVENTUALLY GO WHEN HE LEFT FOR GOOD?
  1014.  
  1015. ┴ $06┴) ╞IRST, HE WENT OFF TO START A COMPANY CALLED ╙IRIUS, WHICH DIED ALMOST
  1016.         BEFORE IT STARTED DUE TO A LAWSUIT OVER THE NAME.  ╘HEN, HE AND SOME
  1017.         FORMER ├OMMODORE DESIGNERS CAME UP WITH THE "╓ICTOR" COMPUTER, WHICH
  1018.         DID MODESTLY, BUT NEVER TOOK OFF.
  1019.  
  1020. ╤ $06┬) ╫HAT DOES THE ╦ERNAL ROUTINE AT $╞╞─2 DO IN TERMS OF FUNCTION AND WHAT
  1021.         PARAMETERS GET PASSED AND RETURNED?
  1022.  
  1023. ┴ $06┬) ╘HE ╦┼╥╬┴╠ ROUTINE AT $╞╞─2 ON ALL ├OMMODORE 8 BIT MACHINES OUTPUTS THE
  1024.         ╨┼╘╙├╔╔ CHARACTER CODE CONTAINED IN THE .┴ REGISTER TO THE CURRENT
  1025.         OUTPUT DEVICE.  ╘HE CARRY FLAG INDICATES THE PRESENCE OF AN ERROR ON
  1026.         RETURN.
  1027.  
  1028. ╤ $06├) ╫HAT ├OMMODORE DRIVE HAS A HIDDEN MESSAGE?
  1029.  
  1030. ┴ $06├) ╘HE 1581 HAS A COUPLE SUCH HIDDEN MESSAGES.  ╔N THE IDLE LOOP OF THE 
  1031.         ╔╨, THE TEXT SAYS "AM I LAZY???...NO JUST WANTED TO SAVE A FEW MS...".
  1032.         ┴LSO, IN THE SAME LOOP, THE FOLLOWING CAN BE FOUND: "THIS IS LAZY!!!".
  1033.         ╠ASTLY, THE CREDITS IN THE 1581 ROMS ARE: "╙OFTWARE DAVID SIRACUSA.
  1034.         HARDWARE GREG BERLI╬┌─EDICATEDTO MY WIFE LIS┴".  (╬OTE: THE ╬ IN BERLI╬
  1035.         AND THE ┴ IN LIS┴ IS TYPICAL OF HOW STRINGS ARE STORED IN THE 1581, 
  1036.         LAST BYTE HAS BIT 7 SET.  ╘HE ┌ AFTER BERLI╬ APPEARS TO HAVE BEEN A 
  1037.         TYPO, BUT ╔ CAN'T SAY FOR SURE.  ╔ HAVE A PROGRAM THAT DISPLAYS THESE.
  1038.         (┼MAIL ME FOR INFO.)
  1039.         
  1040.         ╘HE 1571 HAS THE ╥╧═ AUTHORS' NAMES HIDDEN AT THE BEGINNING OF THE
  1041.         ╥╧═, BUT ╔ DON'T HAVE A 1571 TO SCAN FOR THEM.
  1042.  
  1043. ╤ $06─) ╫HAT COMPUTER WAS THE FIRST TO HAVE A HIDDEN MESSAGE?
  1044.  
  1045. ┴ $06─) ╘HE ╨┼╘ 2001. ╙OME SAID THE 128 HAS A HIDDEN MESSAGE, BUT IT WASN'T
  1046.         THE FIRST.
  1047.  
  1048. ╤ $06┼) ╫HAT WAS IT AND HOW DID YOU GET IT TO COME UP?
  1049.  
  1050. ┴ $06┼) ┬Y TYPING:
  1051.             WAIT 6502,X  (WHERE X WAS A NUMBER BETWEEN 1 AND 255)
  1052.             THE COMPUTER PRINTED ═ICROSOFT! X TIMES ON THE SCREEN.
  1053.  
  1054. ╤ $06╞) ╫HAT DOES ╬╘╙├ STAND FOR?
  1055.  
  1056. ┴ $06╞) ╘RUTHFULLY, ╬╘╙├ CAN STAND FOR DIFFERENT THINGS.  ╔N REGARDS TO THE
  1057.         TELEVISION STANDARD FOR THE ╒╙, THE EXPANSION IS ╬ATIONAL ╘ELEVISION
  1058.         ╙TANDARD ├ODE.  ╚OWEVER, THE BODY THAT FORMED THE STANDARD IS ALSO 
  1059.         CALLED ╬╘╙├: ╬ATIONAL ╘ELEVISION ╙YSTEM ├OMMITTEE.
  1060.         
  1061.  
  1062. ├OMMODORE ╘RIVIA ┼DITION #8
  1063.  
  1064.                           
  1065. ╤ $070) ╧N A ╨┼╘ SERIES COMPUTER, WHAT VISUAL POWER-ON INDICATION WILL TELL
  1066.         THE USER WHETHER THE COMPUTER HAS ╥EVISION 2 OR ╥EVISION 3 ╥╧═S?
  1067.  
  1068. ╤ $071) ╘HE ╔┼┼┼-488 INTERFACE IS SOMETIMES CALLED THE ╟╨╔┬ INTERFACE.  
  1069.         ╫HAT DOES ╟╨╔┬ STAND FOR?
  1070.         
  1071. ╤ $072) ├OMMODORE MANUFACTURED AT LEAST TWO HARD DRIVES WITH ╔┼┼┼-488
  1072.         INTERFACES.  ├AN YOU NAME THEM?
  1073.         
  1074. ╤ $073) ╫HY DIDN'T BUYERS LIKE THE ORIGINAL ╨┼╘-64?
  1075.         
  1076. ╤ $074) ╧N A ╨┼╘ ╥EVISION 2 ╥╧═, WHAT WAS THE LARGEST SINGLE ARRAY SIZE THAT
  1077.         ┬┴╙╔├ COULD HANDLE?
  1078.         
  1079. ╤ $075) ╧N THE STOCK 1541, DATA IS TRANSMITTED ONE BIT AT A TIME.  ╚OW MANY
  1080.         BITS ARE TRANSFERRED AT A TIME ON THE ├OMMODORE 1551 DISK DRIVE? 
  1081.         
  1082. ╤ $076) ╧N ALL ├OMMODORE FLOPPY DISK DRIVES, HOW FAST DOES THE DISK SPIN?
  1083.     
  1084. ╤ $077) ╒PON FIRST READING THE ├OMMODORE 1541 ┼RROR CHANNEL AFTER TURNING
  1085.         ON THE DISK DRIVE, WHAT ERROR NUMBER AND TEXT IS RETURNED?
  1086.         
  1087. ╤ $078) ╫HAT ERROR NUMBER AND TEXT IS RETURNED ON A 1551?
  1088.         
  1089. ╤ $079) ├OMMODORE PRINTERS ARE NORMALLY ASSIGNED TO DEVICE #4, BUT THEY
  1090.         CAN BE ALSO USED AS DEVICE #?
  1091.         
  1092. ╤ $07┴) ╫HAT MICROPROCESSOR IS USED IN THE ├OMMODORE 1551 DISK DRIVE?
  1093.         
  1094. ╤ $07┬) ╫HEN THE ╓╔├-20 WAS DESIGNED, THE SERIAL PORT THROUGHPUT WAS ROUGHLY
  1095.         EQUIVALENT TO THE THROUGHPUT OF THE ╔┼┼┼-488 BUS?  ╫HY ISN'T IT
  1096.         VERY FAST IN PRODUCTION ╓╔├S?
  1097.     
  1098. ╤ $07├) ╧N ├OMMODORE COMPUTERS, HOW MUCH ╥┴═ IS SET ASIDE AS A TAPE BUFFER?
  1099.         
  1100. ╤ $07─) ╧N ├OMMODORE COMPUTERS, MOST EVERY PERIPHERAL HAS A DEVICE NUMBER.
  1101.         ╫HAT IS THE DEVICE NUMBER OF THE SCREEN?
  1102.                                    
  1103. ╤ $07┼) ╫HAT IS THE DEVICE NUMBER OF THE KEYBOARD?
  1104.                                         
  1105. ╤ $07╞) ├OMMODORE COMPUTERS USE 2'S-COMPLEMENT NOTATION TO REPRESENT INTEGERS.
  1106.         ╫HAT IS THE 2'S-COMPLEMENT HEX REPRESENTATION OF THE SIGNLE BYTE -1? 
  1107.         
  1108. ╙OME ARE EASY, SOME ARE HARD, TRY YOUR HAND AT:
  1109.  
  1110.       ├OMMODORE ╘RIVIA ┼DITION #8!
  1111.                                 
  1112. ╩IM ┬RAIN
  1113. BRAIN@MAIL.MSEN.COM
  1114. 2306 ┬ ╚ARTLAND ╥OAD
  1115. ╚ARTLAND, ═╔  48353
  1116. (810) 737-7300 X8528
  1117.  
  1118. =============================================================================
  1119. ╥╙232 ├ONVERTER
  1120. BY ╫ALTER ╫ICKERSHAM (SHADOW@CONNECTED.COM)
  1121.  
  1122. [┼DITOR'S NOTE: ╔'M WARY OF THERE BEING NO VOLTAGE TRANSLATION BUT AM INCLUDING
  1123. IT BECAUSE ╔ _DO_ THINK YOU CAN GET AWAY WITH IT... ╚OWEVER, BECAUSE THIS
  1124. MAGAZINE IS FREE YOU GET WHAT YOU PAY FOR... ]
  1125.  
  1126. ╚ERE'S A MODEM INTERFACE SCHEMATIC FOR THE ├=64/128, WITH IT, AND AROUND
  1127. $5.00, YOU CAN USE ALMOST ANY HAYES COMPAT. EXTERNAL MODEM.  ╘O THE BEST OF
  1128. MY KNOWEDGE, THE 64 HAS A MAXIMUM BAUD RATE (THROUGH THE USER PORT) OF 2400,
  1129. AND THE 128'S IS 9600.
  1130.  
  1131. ╔ ─╧ ╬╧╘ KNOW WHO THE ORIGINAL AUTHOR OF THIS IS, BUT I RE-WROTE IT IN MY
  1132. OWN WORDS, HOPING IT WILL HELP SOMEONE. ╔ ├╠┴╔═ ╬╧ ╥╔╟╚╘╙ ╘╧ ╘╚╔╙ ┴╥╘╔├╠┼.
  1133.  
  1134. ╨┴╥╘╙ ╠╔╙╘:
  1135. -------------
  1136. 7404 ╚EX ╔NVERTER ╔├ ($0.99 AT ╥ADIO ╙HACK)
  1137. ╫IRES, SOLDER, ETC.
  1138. ├OMMODORE ╒SER PORT CONNECTOR (╔ USED ONE OFF A OLD 1650)
  1139.  
  1140. ╚ERE ╔T IS:
  1141. ├64/128 ╒╙┼╥ ╨╧╥╘          ╥╙232 ┴─┴╨╘┼╥                ╥╙232├
  1142.  
  1143. ┴ & ╬ -----------------------╟╥╧╒╬─---------------------- 1 & 7
  1144. ┬ & ├ ---------------------2-7404
  1145.                              7404-1---------------------- 3
  1146. ═ -------------------------3-7404
  1147.                              7404-4---------------------- 2
  1148. ╚-------------------------------------------------------- 8
  1149. ┼-------------------------------------------------------- 20
  1150. ╦ ------------------------------------------------------- 5
  1151. ╠ ------------------------------------------------------- 6
  1152.  
  1153. ╨IN #2N THE USER PORT ═╒╙╘ BE CONNECTED TO PIN 14 OF THE 7404.
  1154. ╨INS ┴&╬ (GROUND) ═╒╙╘ BE CONNECTED TO PIN 7 OF THE 7404.
  1155.  
  1156. ╞OR THOSE OF YOU WHO DON'T HAVE A PINOUT OF THE USER PORT, HERE, HAVE ONE.
  1157.          (╘╧╨)
  1158.  1-2-3-4-5-6-7-8-9-10-11-12
  1159.  --------------------------
  1160.  ┴-┬-├-─-┼-╞-╟-╚-╔-╩--╦--╠-
  1161.         (┬╧╘╘╧═)
  1162.  
  1163. ╘╚╔╙ ─╧┼╙ ╫╧╥╦, THAT'S WHY I'M MODEMING AT 2400. :->, BUT I SOMETIMES
  1164. RECIEVE LINE NOISE, SO ANY UPGRADES TO THIS WOULD BE APPRECIATED (I KNOW
  1165. IT'S NOT MY PHONE LINE).
  1166.  
  1167. =============================================================================
  1168. ╨ROGRAMMING THE ├OMMODORE ╥┴═ ┼XPANSION ╒NITS (╥┼╒S)
  1169. BY ╥ICHARD ╚ABLE (╥ICHARD.╚ABLE@JK.UNI-LINZ.AC.AT)
  1170.  
  1171. ╘HE FOLLOWING ARTICLE, INITIALLY WRITTEN FOR A MAILING LIST, DESCRIBES
  1172. THE ├OMMODORE ╥┼╒S AND EXPLANES HOW TO PROGRAM THEM.
  1173.  
  1174. ├ONTENTS:
  1175.  
  1176.  1) ┼XTERNAL ╥┴═ ┴CCESS ╫ITH ╥┼╒S
  1177.  2) ╥┴═ ┼XPANSION ├ONTROLLER (╥┼├) ╥EGISTERS
  1178.  3) ╚OW ╘O ╥ECOGNIZE ╘HE ╥┼╒
  1179.  4) ╙IMPLE ╥┴═ ╘RANSFER
  1180.  5) ┴DDITIONAL ╞EATURES
  1181.  6) ╘RANSFER ╙PEED
  1182.  7) ╔NTERRUPTS
  1183.  8) ┼XECUTING ├ODE ╔N ┼XPANDED ═EMORY
  1184.  9) ╧THER ╒SEFUL ┴PPLICATIONS ╧F ╘HE ╥┼╒
  1185. 10) ├OMPARISION ╧F ┬ANK ╙WITCHING AND ─═┴
  1186.  
  1187.  
  1188. 1) _┼XTERNAL ╥┴═ ┴CCESS ╫ITH ╥┼╒S_
  1189.  
  1190. ╘HE ╥┼╒S PROVIDE ADDITIONAL ╥┴═ FOR THE ├64/128.  ╘HREE TYPES OF ╥┼╒S HAVE
  1191. BEEN PRODUCED BY ├OMMODORE.  ╘HESE ARE THE 1700, 1764 AND 1750 WITH 128, 256
  1192. AND 512 ╦┬YTES BUILT IN ╥┴═.  ╚OWEVER, THEY CAN BE EXTENDED UP TO SEVERAL
  1193. ═┬YTES.
  1194.  
  1195. ╘HE EXTERNAL MEMORY CAN NOT BE DIRECTLY ADDRESSED BY THE ├64 WITH ITS 16 BIT
  1196. ADDRESS SPACE--IT HAS TO BE TRANSFERRED FROM AND TO THE MAIN MEMORY OF THE
  1197. ├64.  ╞OR THAT PURPOSE, THERE IS A BUILT IN ╥┴═ ┼XPANSION ├ONTROLLER (╥┼├)
  1198. WHICH TRANSFERS MEMORY BETWEEN THE ├64 AND THE ╥┼╒ USING ─IRECT ═EMORY ┴CCESS
  1199. (─═┴).  ╔T CAN ALSO BE USED FOR OTHER PURPOSES.
  1200.  
  1201.  
  1202. 2) _╥┴═ ┼XPANSION ├ONTROLLER (╥┼├) ╥EGISTERS_
  1203.  
  1204. ╘HE ╥┼├ IS PROGRAMMED BY ACCESSING ITS REGISTERS.  ╫HEN A ╥┼╒ IS CONNECTED
  1205. THROUGH THE EXPANSION PORT, THESE REGISTERS APPEAR MEMORY MAPPED IN THE
  1206. ╔/╧-AREA BETWEEN $─╞00 AND $─╞0┴.  ╘HEY CAN BE READ AND WRITTEN TO LIKE ╓╔├-
  1207. AND ╙╔─-REGISTERS.
  1208.  
  1209. $─╞00: ╙╘┴╘╒╙ ╥┼╟╔╙╘┼╥
  1210.     ╓ARIOUS INFORMATION CAN BE OBTAINED (READ ONLY).
  1211.  
  1212.   ┬IT 7:     ╔╬╘┼╥╥╒╨╘ ╨┼╬─╔╬╟  (1 = INTERRUPT WAITING TO BE SERVED)
  1213.                UNNECESSARY
  1214.   ┬IT 6:     ┼╬─ ╧╞ ┬╠╧├╦  (1 = TRANSFER COMPLETE)
  1215.                UNNECESSARY
  1216.   ┬IT 5:     ╞┴╒╠╘  (1 = BLOCK VERIFY ERROR)
  1217.                SET IF A DIFFERENCE BETWEEN ├64 AND ╥┼╒ MEMORY AREAS
  1218.                WAS FOUND DURING A COMPARE COMMAND
  1219.   ┬IT 4:     ╙╔┌┼  (1 = 256 ╦┬)
  1220.                SEEMS TO INDICATE THE SIZE OF THE ╥┴═-CHIPS;
  1221.                SET ON 1764 AND 1750, CLEAR ON 1700.
  1222.   ┬ITS 3..0: ╓┼╥╙╔╧╬
  1223.                CONTAINS 0 ON MY ╥┼╒.
  1224.  
  1225. $─╞01: ├╧══┴╬─ ╥┼╟╔╙╘┼╥
  1226.      ┬Y WRITING TO THIS REGISTER, ╥┴═ TRANSFER OR COMPARISION CAN BE
  1227.      EXECUTED.
  1228.  
  1229.   ┬IT 7:     ┼╪┼├╒╘┼  (1 = TRANSFER PER CURRENT CONFIGURATION)
  1230.                MUST BE SET TO EXECUTE A COMMAND
  1231.   ┬IT 6:     RESERVED  (NORMALLY 0)
  1232.   ┬IT 5:     ╠╧┴─  (1 = ENABLE AUTOLOAD OPTION)
  1233.                ╫ITH AUTOLOAD ENABLED, THE ADDRESS AND LENGTH REGISTERS (SEE
  1234.                BELOW) WILL BE UNCHANGED AFTER A COMMAND EXECUTION.
  1235.                ╧THERWISE, THE ADDRESS REGISTERS WILL BE COUNTED UP TO THE
  1236.                ADDRESS OF THE LAST ACCESSED BYTE OF A ─═┴ + 1
  1237.                AND THE LENGTH REGISTER WILL BE CHANGED (NORMALLY TO 1).
  1238.   ┬IT 4:     ╞╞00
  1239.                ╔F THIS BIT IS SET, COMMAND EXECUTION STARTS IMMEDIATELY
  1240.                AFTER SETTING THE COMMAND REGISTER.
  1241.                ╧THERWISE, COMMAND EXECUTION IS DELAYED UNTIL WRITE ACCESS TO
  1242.                MEMORY POSITION $╞╞00.
  1243.   ┬ITS 3..2: RESERVED  (NORMALLY 0)
  1244.   ┬ITS 1..0: ╘╥┴╬╙╞┼╥ ╘┘╨┼
  1245.                00 = TRANSFER ├64 -> ╥┼╒
  1246.                01 = TRANSFER ╥┼╒ -> ├64
  1247.                10 = SWAP ├64 <-> ╥┼╒
  1248.                11 = COMPARE ├64 - ╥┼╒
  1249.  
  1250. $─╞02..$─╞03: ├64 ┬┴╙┼ ┴──╥┼╙╙
  1251.     16-BIT ├64 BASE ADDRESS IN LOW/HIGH ORDER
  1252.  
  1253. $─╞04..$─╞06: ╥┼╒ ┬┴╙┼ ┴──╥┼╙╙
  1254.     ╘HIS IS A THREE BYTE ADDRESS, CONSISTING OF A LOW AND
  1255.     HIGH BYTE AND AN EXPANSION BANK NUMBER.
  1256.     ╬ORMALLY, ONLY BITS 2..0 OF THE EXPANSION BANK ARE VALID
  1257.     (FOR A MAXIMUM OF 512 ╦┬YTE), THE OTHER BITS ARE ALWAYS
  1258.     SET.
  1259.  
  1260. $─╞07..$─╞08: ╘╥┴╬╙╞┼╥ ╠┼╬╟╘╚
  1261.     ╘HIS IS A 16 BIT VALUE CONTAINING THE NUMBER OF BYTES TO
  1262.     TRANSFER OR COMPARE.
  1263.     ╘HE VALUE 0 STANDS FOR 64 ╦┬YTES.
  1264.     ╔F THE TRANSFER LENGTH PLUS THE ├64 BASE ADDRESS EXCEEDS
  1265.     64╦, THE ├64 ADDRESS WILL OVERFLOW AND CAUSE ├64 MEMORY
  1266.     FROM 0 ON TO BE ACCESSED.
  1267.     ╔F THE TRANSFER LENGTH PLUS THE ╥┼╒ BASE ADDRESS EXCEEDS
  1268.     512╦, THE ╥┼╒ ADDRESS WILL OVERFLOW AND CAUSE ╥┼╒ MEMORY
  1269.     FROM 0 ON TO BE ACCESSED.
  1270.  
  1271. $─╞09: ╔╬╘┼╥╥╒╨╘ ═┴╙╦ ╥┼╟╔╙╘┼╥
  1272.     UNNECESSARY
  1273.  
  1274.   ┬IT 7:     ╔╬╘┼╥╥╒╨╘ ┼╬┴┬╠┼  (1 = INTERRUPT ENABLED)
  1275.   ┬IT 6:     ┼╬─ ╧╞ ┬╠╧├╦ ═┴╙╦  (1 = INTERRUPT ON END)
  1276.   ┬IT 5:     ╓┼╥╔╞┘ ┼╥╥╧╥  (1 = INTERRUPT ON VERIFY ERROR)
  1277.   ┬ITS 4..0: UNUSED (NORMALLY ALL SET)
  1278.  
  1279. $─╞0┴: ┴──╥┼╙╙ ├╧╬╘╥╧╠ ╥┼╟╔╙╘┼╥
  1280.     ╫ITH THIS REGISTER, ADDRESS COUNTING DURING ─═┴ CAN BE CONTROLLED.
  1281.     ╔F A BASE ADDRESS IS FIXED, THE SAME BYTE IS USED REPEATEDLY.
  1282.  
  1283.   ┬IT 7:     ├64 ┴──╥┼╙╙ ├╧╬╘╥╧╠  (1 = FIX ├64 ADDRESS)
  1284.   ┬IT 6:     ╥┼╒ ┴──╥┼╙╙ ├╧╬╘╥╧╠  (1 = FIX ╥┼╒ ADDRESS)
  1285.   ┬ITS 5..0: UNUSED (NORMALLY ALL SET)
  1286.  
  1287.  
  1288. ╔N ORDER TO ACCESS THE ╥┼╒ REGISTERS IN ASSEMBLY LANGUAGE, IT IS CONVENIENT
  1289. TO DEFINE LABELS SOMETHING LIKE THIS:
  1290.  
  1291.   STATUS   = $─╞00
  1292.   COMMAND  = $─╞01
  1293.   C64BASE  = $─╞02
  1294.   REUBASE  = $─╞04
  1295.   TRANSLEN = $─╞07
  1296.   IRQMASK  = $─╞09
  1297.   CONTROL  = $─╞0┴
  1298.  
  1299.  
  1300. 3) _╚OW ╘O ╥ECOGNIZE ╘HE ╥┼╒_
  1301.  
  1302. ╬ORMALLY, THE ADDRESSES BETWEEN $─╞02 AND $─╞05 ARE UNUSED, VALUES STORED
  1303. THERE GET LOST.  ╘HEREFORE, IF E.G. THE VALUES 1,2,3,4 ARE WRITTEN TO
  1304. $─╞02..$─╞05 AND DO NOT STAY THERE, NO ╥┼╒ CAN BE CONNECTED.  ╚OWEVER, IF THE
  1305. VALUES ARE THERE, IT COULD BE CAUSED BY ANOTHER KIND OF MODULE CONNECTED THAT
  1306. ALSO USES THESE ADDRESSES.
  1307.  
  1308. ┴NOTHER PROBLEM IS THE RECOGNITION OF THE NUMBER OF ╥┴═ BANKS (64 ╦┬YTE
  1309. UNITS) INSTALLED.  ╘HE ╙╔┌┼ BIT ONLY TELLS IF THERE ARE AT LEAST 2 (1700) OR
  1310. 4 (1764, 1750) BANKS INSTALLED.  ┬Y TRYING TO ACCESS AND VERIFY BYTES IN AS
  1311. MANY ╥┴═ BANKS AS POSSIBLE, THE REAL SIZE CAN BE DETERMINED.  ╘HIS CAN BE
  1312. SEEN IN THE SOURCE TO "─YNAMIC MEMORY ALLOCATION FOR THE 128" IN ├OMMODORE
  1313. ╚ACKING ╔SSUE 2.
  1314.  
  1315. ╔N ANY WAY, THE USER OF A PROGRAM SHOULD BE ABLE TO CHOOSE, IF AND WHICH ╥┼╒
  1316. BANKS ARE TO BE USED.
  1317.  
  1318.  
  1319. 4) _╙IMPLE ╥┴═ ╘RANSFER_
  1320.  
  1321. ╓ERY LITTLE OPTIONS OF THE ╥┼╒ ARE NECESSARY FOR THE MAIN PURPOSES OF ╥┴═
  1322. EXPANDING.  ╩UST SET THE BASE ADDRESSES, TRANSFER LENGTH, AND THEN THE
  1323. COMMAND REGISTER.
  1324.  
  1325. ╘HE FOLLOWING CODE TRANSFERS ONE ╦┬YTE CONTAINING THE SCREEN MEMORY
  1326. ($0400..$07╞╞) TO ADDRESS 0 IN THE ╥┼╒:
  1327.  
  1328.   LDA #0
  1329.   STA CONTROL ; TO MAKE SURE BOTH ADDRESSES ARE COUNTED UP
  1330.   LDA #<$0400
  1331.   STA C64BASE
  1332.   LDA #>$0400
  1333.   STA C64BASE + 1
  1334.   LDA #0
  1335.   STA REUBASE
  1336.   STA REUBASE + 1
  1337.   STA REUBASE + 2
  1338.   LDA #<$0400
  1339.   STA TRANSLEN
  1340.   LDA #>$0400
  1341.   STA TRANSLEN + 1
  1342.   LDA #%10010000;  C64 -> ╥┼╒ WITH IMMEDIATE EXECUTION
  1343.   STA COMMAND
  1344.  
  1345. ╔N ORDER TO TRANSFER THE MEMORY BACK TO THE ├64, REPLACE "LDA #%10010000" BY
  1346. "LDA #%10010001".
  1347.  
  1348. ╔ THINK, THIS SUBSET OF 17XX FUNCTIONS WOULD BE ENOUGH FOR A REASONABLE ╥┴═
  1349. EXPANSION.  ╚OWEVER, IF FULL COMPATIBILITY WITH 17XX ╥┼╒S IS DESIRED, ALSO
  1350. THE MORE COMPLICATED FUNCTIONS HAVE TO BE IMPLEMENTED.
  1351.  
  1352. 5) _┴DDITIONAL ╞EATURES_
  1353.  
  1354. ╙WAPPING ═EMORY
  1355.  
  1356. ╫ITH THE SWAP-COMMAND, MEMORY BETWEEN 17XX AND ├64 CAN BE EXCHANGED. ╘HE
  1357. PROGRAMMING IS THE SAME AS IN SIMPLE ╥┴═ TRANSFER.
  1358.  
  1359.  
  1360. ├OMPARING ═EMORY
  1361.  
  1362. ╬O ╥┴═ IS TRANSFERRED. ╔NSTEAD, THE NUMBER OF BYTES SPECIFIED IN THE TRANSFER
  1363. LENGTH REGISTER IS COMPARED.  ╔F THERE ARE DIFFERENCES, THE ╞┴╒╠╘ BIT OF THE
  1364. STATUS REGISTER IS SET.  ╔N ORDER TO GET VALID INFORMATION, THIS BIT HAS TO
  1365. BE CLEARED BEFORE COMPARING.  ╘HIS IS POSSIBLE BY READING THE STATUS
  1366. REGISTER.
  1367.  
  1368.  
  1369. ╒SING ┴LL ├64 ═EMORY
  1370.  
  1371. ╬ORMALLY, ├64 MEMORY IS ACCESSED IN THE MEMORY CONFIGURATION SELECTED DURING
  1372. WRITING TO THE COMMAND REGISTER.  ╔N ORDER TO BE ABLE TO WRITE TO THE COMMAND
  1373. REGISTER, THE ╔/╧-AREA HAS TO BE ACTIVE.  ╔F ╥┴═ BETWEEN $─000 AND $─╞╞╞ OR
  1374. CHARACTER ╥╧═ SHALL BE USED, IT IS POSSIBLE TO DELAY THE EXECUTION OF THE
  1375. COMMAND BY USING A COMMAND BYTE WITH BIT 4 ("╞╞00") CLEARED.  ╘HE COMMAND
  1376. WILL THEN BE EXECUTED WHEN AN ARBITRARY VALUE IS WRITTEN TO ADDRESS $╞╞00.
  1377.  
  1378. ┼XAMPLE:
  1379.  
  1380.   < ╙ET BASE ADDRESSES AND TRANSFER LENGTH >
  1381.   LDA #%10000000 ; TRANSFER ├64 ╥┴═ -> ╥┼╒ DELAYED
  1382.   STA COMMAND
  1383.   SEI
  1384.   LDA $01
  1385.   AND #$30
  1386.   STA $01 ; SWITCH ON 64 ╦┬YTE ╥┴═
  1387.   LDA $╞╞00 ; DO NOT CHANGE THE CONTENTS OF $╞╞00
  1388.   STA $╞╞00 ; EXECUTE ─═┴
  1389.   LDA $01
  1390.   ORA #$37
  1391.   STA $01 ; SWITCH ON NORMAL CONFIGURATION
  1392.   CLI
  1393.  
  1394.  
  1395. 6) _╘RANSFER ╙PEED_
  1396.  
  1397. ─URING ─═┴ THE ├╨╒ IS HALTED--THE MEMORY ACCESS CYCLES NORMALLY AVAILABLE FOR
  1398. THE ├╨╒ ARE NOW USED TO ACCESS ONE BYTE EACH CYCLE. ╘HEREFORE, WITH SCREEN
  1399. AND SPRITES SWITCHED OFF, IN EVERY CLOCK CYCLE (985248 PER SECOND ON ╨┴╠
  1400. MACHINES) ONE BYTE IS TRANSFERRED.  ╔F SCREEN IS ON OR SPRITES ARE ENABLED,
  1401. TRANSFER IS A BIT SLOWER, AS THE ╓╔├ SOMETIMES ACCESSES ╥┴═ EXCLUSIVELY. 
  1402. ├OMPARING MEMORY AREAS IS AS FAST AS TRANSFERING.  (├OMPARISON IS STOPPED
  1403. ONCE THE FIRST DIFFERENCE IS FOUND.)  ╙WAPPING MEMORY IS ONLY HALF AS FAST,
  1404. BECAUSE TWO ├64 MEMORY ACCESSES PER BYTE (READ & WRITE) ARE NECESSARY.
  1405.  
  1406.  
  1407. 7) _╔NTERRUPTS_
  1408.  
  1409. ┬Y SETTING CERTAIN BITS IN THE INTERRUPT MASK REGISTER, ╔╥╤S AT THE END OF A
  1410. ─═┴ CAN BE SELECTED.  ╚OWEVER, AS THE ├╨╒ IS HALTED DURING ─═┴, A TRANSFER OR
  1411. COMPARISION WILL ALWAYS BE FINISHED AFTER THE STORE INSTRUCTION INTO THE
  1412. COMMAND REGISTER OR $╞╞00.  ╘HEREFORE, THERE IS NO NEED TO CHECK FOR AN "┼╬─
  1413. ╧╞ ┬╠╧├╦" (BIT 6 OF STATUS REGISTER) OR TO ENABLE AN INTERRUPT.
  1414.  
  1415.  
  1416. 8) _┼XECUTING ├ODE ╔N ┼XPANDED ═EMORY_
  1417.  
  1418. ├ODE IN EXPANDED MEMORY HAS TO BE COPIED INTO ├64 MEMORY BEFORE EXECUTION. 
  1419. ╘HIS IS A DISADVANTAGE AGAINST BANK SWITCHING SYSTEMS. ╚OWEVER, BANK
  1420. SWITCHING CAN BE SIMULATED BY THE ╙╫┴╨ COMMAND.  ╘HIS IS DONE E.G. IN ╥┴═─╧╙. 
  1421. ╘HERE, ONLY 256 BYTES OF ├64 MEMORY ARE OCCUPIED, THE 8 ╦┬YTE ╥┴═ DISK DRIVER
  1422. IS SWAPPED IN WHENEVER NEEDED.  ╘OO MUCH SWAPPING IS ONE REASON FOR ╥┴═─╧╙ TO
  1423. BE RELATIVELY SLOW AT SEQUENTIAL FILE ACCESS.
  1424.  
  1425.  
  1426. 9) _╧THER ╒SEFUL ┴PPLICATIONS ╧F ╘HE ╥┼╒_
  1427.  
  1428. ╘HE ╥┼├ IS NOT ONLY USEFUL FOR ╥┴═ TRANSFER AND COMPARISON.
  1429.  
  1430. ╧NE OTHER APPLICATION (USED IN ╟┼╧╙) IS COPYING ├64 ╥┴═ AREAS BY FIRST
  1431. TRANSFERRING THEM TO THE ╥┼╒ AND THEN TRANSFERRING THEM BACK INTO THE DESIRED
  1432. POSITION IN ├64 MEMORY.  ─UE TO THE FAST ─═┴, THIS IS ABOUT 5 TIMES FASTER
  1433. THAN COPYING MEMORY WITH MACHINE LANGUAGE INSTRUCTIONS.
  1434.  
  1435. ╔NTERESTING THINGS CAN BE DONE BY FIXING BASE ADDRESSES:  ┬Y FIXING THE ╥┼╒
  1436. BASE ADDRESS, LARGE ├64 AREAS CAN BE FAST FILLED WITH A SINGLE BYTE VALUE. 
  1437. ╔T IS ALSO POSSIBLE TO FIND THE END OF AN AREA CONTAINING EQUAL BYTES VERY
  1438. FAST, E.G. FOR DATA COMPRESSION.
  1439.  
  1440. ╞IXING THE ├64 BASE ADDRESS IS INTERESTING IF IT POINTS TO AN ╔/╧-PORT. 
  1441. ╘HEN, DATA CAN BE WRITTEN OUT FASTER THAN NORMALLY POSSIBLE.  ╔T WOULD BE
  1442. POSSIBLE TO USE REAL BITMAP GRAPHICS IN THE UPPER AND LOWER SCREEN BORDER BY
  1443. CHANGING THE "MAGIC BYTE" (BYTE WITH THE HIGHEST ADDRESS ACCESSABLE BY THE
  1444. ╓╔├) IN EVERY CLOCK CYCLE. ╘HEREFORE, OF COURSE, THE VERTICAL BORDER WOULD
  1445. HAVE TO BE SWITCHED OFF.
  1446.  
  1447. ╟ENERALLY THE ╥┼├ COULD BE USED AS GRAPHICS ACCELERATOR, E.G. TO COPY BITMAP
  1448. AREAS OR OTHER DISPLAY DATA FAST INTO THE ╓╔├-ADDRESSABLE 16 ╦┬YTE AREA.
  1449.  
  1450.  
  1451. 10) _├OMPARISION ╧F ┬ANK ╙WITCHING AND ─═┴_
  1452.  
  1453. ╫HEN COMPARING BANK SWITCHING AND ─═┴ FOR MEMORY EXPANSION, ╔ THINK, ─═┴ IS
  1454. THE MORE COMFORTABLE METHOD TO PROGRAM. ╔T IS ALSO FASTER IN MOST CASES. 
  1455. ╘HE DISADVANTAGE OF CODE EXECUTION NOT POSSIBLE IN EXTERNAL MEMORY CAN BE
  1456. MINIMIZED BY ALWAYS COPYING ONLY THE NECESSARY PARTS INTO ├64 MEMORY. 
  1457. ┼XECUTING THE CODE WILL THEN TAKE MUCH MORE TIME THAN COPYING IT INTO ├64
  1458. MEMORY.
  1459.  
  1460. =============================================================================
  1461. ┴ ─IFFERENT ╨ERSPECTIVE: ╘HREE-─IMENSIONAL ╟RAPHICS ON THE ├64
  1462. BY ╙TEPHEN ╩UDD (JUDD@MERLE.ACNS.NWU.EDU) AND
  1463.    ╟EORGE ╘AYLOR (YURIK@IO.ORG)
  1464.  
  1465. ╔NTRODUCTION
  1466. ------------
  1467.  
  1468. ╫E'VE ALL SEEN THEM: NEAT-LOOKING THREE-DIMENSIONAL GRAPHICS TUMBLING AROUND
  1469. ON A COMPUTER.  ┬UT HOW IS IT DONE?  ╔N PARTICULAR, HOW WOULD YOU DO IT ON A
  1470. ├OMMODORE-64?  ╬OWADAYS THE TYPICAL ANSWER TO THE FIRST QUESTION IS "╩UST
  1471. USE THE FUNCTIONS IN 3DGRPHCS.LIB" (OR "┬EATS ME.").  ╘HE ANSWER TO THE
  1472. SECOND IS EITHER "╫ELL AN ELITE CODER LIKE ME CAN'T LET SECRETS LIKE THAT
  1473. OUT" OR ELSE "╫HAT, YOU MEAN PEOPLE STILL USE THOSE THINGS?"
  1474.  
  1475. ╙O THIS IS A LITTLE ARTICLE WHICH ATTEMPTS TO TAKE SOME OF THE MYSTERY OUT
  1476. OF THREE DIMENSIONAL GRAPHICS.  ═OST OF THE MATHEMATICS INVOLVED ARE VERY
  1477. SIMPLE, AND THE GEOMETRIC CONCEPTS ARE VERY INTUITIVE. ├ODING IT UP ON A
  1478. ├-64 IS MORE OF A CHALLENGE, ESPECIALLY WHEN YOU WANT TO MAKE IT FAST, BUT
  1479. EVEN THEN IT'S NOT TOO TOUGH.  ╟EORGE AND ╔ WROTE THE CODE IN ABOUT A WEEK
  1480. (AND TALKED ABOUT IT FOR ABOUT A WEEK BEFORE THAT).  ╨ERHAPS YOU WILL
  1481. APPRECIATE THIS ASPECT MORE IF YOU KNOW THAT ╔ HAVEN'T WRITTEN 6510 CODE
  1482. SINCE 1988, AND UNTIL THE LAST TWO DAYS ╟EORGE HAD NO COMPUTER ON WHICH TO
  1483. TEST HIS IDEAS (AND ON THE LAST DAY IT DIED)!
  1484.  
  1485. ╘HE GOAL OF THIS ARTICLE IS THAT BY THE TIME YOU REACH THE END OF IT YOU
  1486. WILL BE ABLE TO DO YOUR OWN COOL-LOOKING 3D GRAPHICS ON A ├64. ╙OME OF YOU
  1487. MAY FIND IT PATRONIZING AT TIMES, BUT ╔ HOPE THAT IT IS AT A LEVEL THAT
  1488. EVERYONE CAN ENJOY AND LEARN SOMETHING FROM.  ┴ND FEEL FREE TO WRITE TO US!
  1489.  
  1490. ╘HE FIRST PART EXPLAINS SOME OF THE FUNDAMENTAL THEORETICAL CONCEPTS
  1491. INVOLVED.  ═OSTLY WHAT IS REQUIRED IS SOME GEOMETRIC IMAGINATION, ALTHOUGH
  1492. YOU NEED TO KNOW A LITTLE TRIGONOMETRY, AS WELL AS HOW TO MULTIPLY TWO
  1493. MATRICES TOGETHER.
  1494.  
  1495. ╘HE SECOND PART DEALS WITH IMPLEMENTING THE ALGORITHMS ON A COMPUTER; SINCE
  1496. THIS IS ├=╚ACKING, IT IS A GOOD ASSUMPTION THAT THE IMPLEMENTATION IS ON THE
  1497. ├-64!  ═OST OF THE CODE IS DESIGNED FOR SPEED, AND LOTS OF IT IS ALSO
  1498. DESIGNED SO THAT IT CAN BE CALLED FROM ┬┴╙╔├!
  1499.  
  1500. ╞INALLY, AN EXAMPLE PROGRAM WHICH USES ALL OF THE TECHNIQUES PRESENTED HERE
  1501. IS INCLUDED, INCLUDING SOURCE.  ╘HE PROGRAM ROTATES A CUBE IN THREE
  1502. DIMENSIONS.
  1503.  
  1504. ┬Y ITSELF THE CODE IS NOT THE FASTEST IN THE WORLD; WHAT IS IMPORTANT HERE
  1505. ARE THE CONCEPTS.  ╫ITH A LITTLE FIDDLING, AND MAYBE SOME LOOP UNROLLING,
  1506. YOU CAN GET THESE ROUTINES GOING QUITE FAST; FOR INSTANCE, A 26 CYCLE LINE
  1507. DRAWING ROUTINE IS NOT HARD AT ALL USING MORE SOPHISTICATED VERSIONS OF
  1508. THESE ALGORITHMS.  ╘HIS TIME AROUND THE CODE IS DESIGNED FOR CLARITY OVER
  1509. QUALITY.
  1510.  
  1511. ╘HERE ARE LOTS AND LOTS OF LITTLE DETAILS THAT ARE NOT SPECIFICALLY COVERED
  1512. BY THIS ARTICLE.  ┬UT IF YOU UNDERSTAND ALL OF THE CONCEPTS HERE IT
  1513. SHOULDN'T BE TOO HARD TO FIGURE OUT THE PROBLEM WHEN SOMETHING GOES WRONG.
  1514.  
  1515. ╘HIS MATERIAL IS THE RESULT OF A WEEK'S WORTH OF DISCUSSIONS ON COMP.SYS.CBM
  1516. BETWEEN ╟EORGE, MYSELF, AND SEVERAL OTHER PEOPLE.  ╙O A BIG THANK YOU TO
  1517. EVERYONE WHO HELPED US TO KNOCK THESE IDEAS OUT, AND WE HOPE YOU FIND THIS
  1518. TO BE A USEFUL REFERENCE!
  1519.  
  1520. ╔NCIDENTALLY, THE IDEAS AND TECHNIQUES IN THIS ARTICLE AREN'T JUST FOR
  1521. DRAWING NEAT PICTURES; FOR EXAMPLE, A GOOD APPLICATION IS THE STABILIZATION
  1522. OF AN ORBITING SATELLITE.  ╘HE MATHEMATICAL IDEAS BEHIND LINEAR
  1523. TRANSFORMATIONS ARE IMPORTANT IN, FOR INSTANCE, THE STUDY OF DYNAMICAL
  1524. SYSTEMS (WHICH LEADS TO ├HAOS AND ALL SORTS OF ADVANCED MATHEMATICAL
  1525. SUBJECTS).
  1526.  
  1527. ┬UT IT ALSO MAKES YOU LOOK REALLY COOL IN FRONT OF YOUR FRIENDS.
  1528.  
  1529. ╞IRST ╘HINGS ╞IRST
  1530. ------------------
  1531.  
  1532. ┬EFORE WE BEGIN, YOU ARE GOING TO HAVE TO GET A FEW IDEAS INTO YOUR HEAD. 
  1533. ╞IRST AND FOREMOST IS THE COORDINATE SYSTEM WE WILL BE USING: A RIGHT-HANDED
  1534. COORDINATE SYSTEM.  ╔N OUR SYSTEM, THE X-AXIS IS GOING TO COME OUT TOWARDS
  1535. YOU, THE Y-AXIS IS GOING TO GO TO YOUR RIGHT, AND THE Z-AXIS IS GOING TO GO
  1536. "UP".
  1537.  
  1538. ╙ECOND, YOU NEED TO KNOW A LITTLE MATH.  ┘OU NEED TO KNOW ABOUT POLAR
  1539. COORDINATES, AND YOU NEED TO KNOW HOW TO MULTIPLY TWO MATRICES TOGETHER. 
  1540. ╘HE IDEAS ARE ALL GEOMETRIC, BUT THE COMPUTATIONS ARE ALL (OF COURSE)
  1541. MATHEMATICAL.
  1542.  
  1543. ╬OW, LET US START THINKING ABOUT A CUBE!
  1544.  
  1545. ╠ET'S FIRST CENTER OUR CUBE AT THE ORIGIN.  ╬OT ONLY DOES THIS MAKE IT EASY
  1546. TO VISUALIZE, BUT TO MAKE OUR CUBE DO THINGS (LIKE ROTATE) THE WAY WE WANT
  1547. IT TO WE ARE GOING TO HAVE TO REQUIRE THIS.  ┴ CUBE HAS EIGHT CORNERS, ALL
  1548. CONNECTED TO EACH OTHER IN A PARTICULAR WAY.
  1549.  
  1550. ╘HERE'S NO REASON TO MAKE THINGS COMPLICATED ALREADY, SO LET'S PUT THE
  1551. CORNERS OF THE CUBE AT X=+/-1, Y=+/-1, AND Z=+/-1.  ╘HIS GIVES US EIGHT
  1552. POINTS TO WORK WITH: ╨1=[1 1 1] ╨2=[1 -1 1] ╨3=[-1 -1 1] ETC.
  1553.  
  1554. ═INIMALISTS MAY DISAGREE, BUT A CUBE ALL BY ITSELF ISN'T ALL THAT EXCITING. 
  1555. ╙O HOW DO WE DO STUFF TO IT?  ╞OR THAT MATTER, WHAT KINDS OF STUFF CAN WE DO
  1556. TO IT?
  1557.  
  1558. ╥OTATIONS IN THE ╨LANE
  1559. ----------------------
  1560.  
  1561. ╧NE OF THE COOL THINGS TO DO WITH A THREE-DIMENSIONAL OBJECT IS OF COURSE TO
  1562. ROTATE IT.  ╘O UNDERSTAND HOW TO DO THIS, WE NEED TO FIRST LOOK AT ROTATIONS
  1563. IN THE PLANE.  ┴ LITTLE LATER ON, THIS ARTICLE IS GOING TO ASSUME YOU KNOW
  1564. HOW TO MULTIPLY TWO MATRICES TOGETHER.
  1565.  
  1566. ┬EFORE STARTING, WE NEED TO KNOW SOME IMPORTANT TRIG FORMULAS (OF COURSE,
  1567. EVERYONE KNOWS IMPORTANT FORMULAS LIKE THESE, BUT LET ME JUST REMIND YOU OF
  1568. THEM):
  1569.  
  1570.         COS(┴+┬) = COS(┴)COS(┬) - SIN(┴)SIN(┬)
  1571.         SIN(┴+┬) = COS(┴)SIN(┬) + SIN(┴)COS(┬)
  1572.  
  1573. ╠ET US TAKE A LOOK AT ROTATIONS IN THE PLANE; THAT IS, IN TWO DIMENSIONS. 
  1574. ╘HINK OF THE TYPICAL X-Y AXIS.  ╠ET'S SAY THAT WE HAVE A POINT AT [X1 Y1]
  1575. AND WANT TO ROTATE IT BY AN ANGLE ┬, ABOUT THE ORIGIN, SO THAT WE END UP AT
  1576. THE ROTATED COORDINATE [X2 Y2].  ╫HAT ARE X2 AND Y2?  ╘HE EASIEST WAY TO
  1577. FIND THEM IS TO USE POLAR COORDINATES.
  1578.  
  1579. ╫E CAN WRITE THE POINT [X1 Y1] AS THE POINT (R,T), WHERE R IS THE DISTANCE
  1580. FROM THE ORIGIN TO THE POINT, AND T IS THE ANGLE FROM THE X-AXIS, MEASURED
  1581. COUNTER-CLOCKWISE.  ╘HEREFORE, X1 = R*COS(T) AND Y1=R*SIN(T). ╔F WE THEN
  1582. ROTATE THIS VECTOR BY AN AMOUNT ┬,
  1583.         
  1584.         X2 = R*COS(T+┬) 
  1585.            = R*(COS(T)COS(┬) - SIN(T)SIN(┬))
  1586.            = X1*COS(┬) - Y1*SIN(┬).
  1587.  
  1588. ╙IMILARLY,
  1589.  
  1590.         Y2 = R*SIN(T+┬) = X1*SIN(┬) + Y1*COS(┬).
  1591.  
  1592. ╔N MATRIX FORM, THIS CAN BE WRITTEN AS
  1593.  
  1594.         [X2] = [COS(┬)  -SIN(┬)] [X1]
  1595.         [Y2]   [SIN(┬)   COS(┬)] [Y1]
  1596.  
  1597. ╚OW DO WE EXTEND THIS TO THREE DIMENSIONS?  ┼ASY.  ╘HE KEY THING TO REALIZE
  1598. HERE IS THAT, IN THREE DIMENSIONS, THE ABOVE ROTATIONS ARE REALLY ROTATIONS
  1599. ABOUT THE Z-AXIS.  ┴T ANY POINT ALONG THE Z-AXIS WE COULD TAKE A THIN SLICE
  1600. OF THE THREE-DIMENSIONAL SPACE (SO THAT OUR SLICE IS PARALLEL TO THE X-Y
  1601. AXIS) AND PRETEND THAT WE ARE REALLY IN TWO-DIMENSIONAL SPACE.  ╘HEREFORE,
  1602. TO ROTATE A POINT ABOUT THE Z-AXIS THE X- AND Y-EQUATIONS ARE THE SAME AS
  1603. ABOVE, AND THE Z-COORDINATE STAYS FIXED.  ╔N MATRIX FORM THIS IS
  1604.  
  1605.         [X2]   [COS(┬)  -SIN(┬)  0] [X1]
  1606.         [Y2] = [SIN(┬)   COS(┬)  0] [Y1]
  1607.         [Z2]   [  0        0     1] [Z1]
  1608.  
  1609. ╙IMILARLY, IT IS EASY TO SEE THAT
  1610.  
  1611.         [X2]   [  1        0        0   ] [X1]
  1612.         [Y2] = [  0      COS(┬)  -SIN(┬)] [Y1]
  1613.         [Z2]   [  0      SIN(┬)   COS(┬)] [Z1]
  1614.  
  1615. IS A ROTATION ABOUT THE X-AXIS, AND THAT
  1616.  
  1617.         [X2]   [COS(┬)     0      SIN(┬)] [X1]
  1618.         [Y2] = [  0        1        0   ] [Y1]
  1619.         [Z2]   [-SIN(┬)    0      COS(┬)] [Z1]
  1620.  
  1621. IS A ROTATION ABOUT THE Y-AXIS.  ┘OU MAY HAVE NOTICED THAT THE SIGNS OF
  1622. SIN(┬) HAVE BEEN REVERSED; THIS IS BECAUSE IN OUR RIGHT-HANDED COORDINATE
  1623. SYSTEM THE Z-X PLANE IS "BACKWARDS": IN THE Z-X PLANE X INCREASES TO THE
  1624. LEFT, WHILE Z INCREASES "UP".
  1625.  
  1626. ┘OU MAY BE WONDERING WHY WE WRITE THIS ALL IN MATRIX FORM.  ╘HE ABOVE MATRIX
  1627. EQUATIONS ARE CALLED LINEAR TRANSFORMATIONS OF THE VECTOR [X1 Y1 Z1].  ╘HERE
  1628. ARE LOTS OF DEEP MATHEMATICAL CONCEPTS SITTING RIGHT BEHIND WHAT LOOKS TO BE
  1629. AN EASY WAY OF WRITING SEVERAL EQUATIONS.  ┼NTIRE BOOKS ARE WRITTEN ON THE
  1630. SUBJECT, AND THAT IS AS GOOD A REASON AS ANY FOR ME NOT TO GO INTO DETAIL.
  1631.  
  1632. ┬UT WRITING THINGS IN THIS WAY ALSO OFFERS US SEVERAL _COMPUTATIONAL_
  1633. ADVANTAGES.  ╥OTATIONS AREN'T THE ONLY LINEAR TRANSFORMATIONS; LET'S SAY
  1634. THAT ╔ WANT TO ROTATE A POINT ABOUT THE X-AXIS, SHEAR IT IN THE Y-DIRECTION,
  1635. REFLECT IT THROUGH THE LINE THETA=PI/5, AND ROTATE IT THROUGH THE Z-AXIS. 
  1636. ┘OU COULD HAVE ONE SUBROUTINE WHICH DID THE ROTATION, AND ONE THAT DID THE
  1637. SHEAR, ETC.  ┬UT BY WRITING IT IN MATRIX FORM, THE ENTIRE PROCESS IS SIMPLY
  1638. A SERIES OF MATRIX MULTIPLICATIONS.
  1639.  
  1640. ╔F YOU THINK ABOUT IT YOU MIGHT REALIZE THAT IT REALLY IS THE SAME THING NO
  1641. MATTER WHICH WAY YOU DO IT, BUT THERE IS A FUNDAMENTAL DIFFERENCE IN THE
  1642. VIEWPOINT OF EACH METHOD: ONE VIEWS IT AS A SERIES OF UNRELATED MATHEMATICAL
  1643. OPERATIONS EACH WITH IT'S OWN INDIVIDUAL FUNCTION, WHILE THE OTHER METHOD
  1644. VIEWS IT AS A SERIES OF MATRIX MULTIPLICATIONS SO THAT IT'S BASICALLY THE
  1645. SAME THING, OVER AND OVER.
  1646.  
  1647. ╫HAT THIS MEANS FOR YOU IS THAT IF YOU WANT TO ROTATE A POINT AROUND THE
  1648. X-AXIS, THE Y-AXIS, AND THE Z-AXIS, YOU CAN TAKE THE MATRIX FOR EACH
  1649. TRANSFORMATION AND MULTIPLY THEM ALL TOGETHER, AND THEN APPLY THIS ONE BIG
  1650. MATRIX TO THE POINT.  ╧NE THING TO BE VERY AWARE OF: IN GENERAL, MATRIX
  1651. MULTIPLICATION IS NOT COMMUTATIVE.  ╘HAT IS, IF ╪ IS A ROTATION MATRIX ABOUT
  1652. THE X-AXIS AND ┘ IS A ROTATION ABOUT THE Y-AXIS, IT WILL ALMOST NEVER BE
  1653. TRUE THAT ╪┘ = ┘╪.  ╫HAT THIS MEANS GEOMETRICALLY IS THAT IF YOU TAKE A
  1654. POINT, ROTATE IT AROUND THE X-AXIS BY AN AMOUNT ┴, THEN ROTATE IT AROUND THE
  1655. Y-AXIS BY AN AMOUNT ┬, YOU WILL USUALLY END UP AT A DIFFERENT POINT THAN IF
  1656. YOU FIRST ROTATE IT AROUND THE Y-AXIS.
  1657.  
  1658. ╔F YOU ARE INTERESTED IN LEARNING MORE ABOUT ROTATIONS AND THEIR USES, A
  1659. GOOD PLACE TO START IS ALMOST ANY BOOK ON MECHANICS, FOR INSTANCE "├LASSICAL
  1660. ═ECHANICS" BY ╟OLDSTEIN.  ╔F YOU WANT TO LEARN MORE ABOUT LINEAR
  1661. TRANSFORMATIONS YOU CAN FIND IT IN ANY DECENT BOOK ON LINEAR ALGEBRA, AS
  1662. WELL AS IN A LOT OF PHYSICS TEXTS.  ╘HERE IS A GOOD INTRODUCTION IN ═ARGENAU
  1663. AND ═URPHY "╘HE ═ATHEMATICS OF ╨HYSICS AND ├HEMISTRY", AND THERE IS A
  1664. SEMI-╧╦ BOOK ON LINEAR ALGEBRA BY ╟OLDBERG.
  1665.  
  1666. ╬OW WE KNOW THE GEOMETRIC AND MATHEMATICAL PRINCIPLES BEHIND ROTATIONS IN
  1667. THREE DIMENSIONS.  ┬UT WE WANT TO VISUALIZE THIS ON A COMPUTER, ON A
  1668. TWO-DIMENSIONAL SCREEN: WE NEED SOME WAY OF TAKING A POINT IN
  1669. THREE-DIMENSIONS AND BRINGING IT DOWN TO TWO DIMENSIONS, BUT IN A WAY THAT
  1670. FOOLS US INTO THINKING THAT IT REALLY IS THREE-DIMENSIONAL.
  1671.  
  1672. ╫HAT WE NEED ARE PROJECTIONS.
  1673.  
  1674. ╨ROJECTIONS
  1675. -----------
  1676.  
  1677. ╬OW, WE COULD JUST DO A SIMPLE PROJECTION AND SET THE Z-COORDINATE EQUAL TO
  1678. ZERO, BUT IN DOING SO WE HAVE ELIMINATED SOME OF THE INFORMATION, AND IT
  1679. WON'T LOOK VERY THREE-DIMENSIONAL TO OUR EYES.  ╙O WE NEED TO THINK OF A
  1680. BETTER METHOD.
  1681.  
  1682. ╙IT BACK IN YOUR CHAIR AND IMAGINE FOR A MINUTE OR TWO.  ╔MAGINE THE THREE
  1683. COORDINATE AXES.  ╬OW IMAGINE THAT THERE IS A PINHOLE CAMERA, WITH  IT'S
  1684. PINHOLE LENS AT THE ORIGIN, AND IT'S FILM AT THE PLANE AT Z=1 PARALLEL TO
  1685. THE X-Y PLANE.  ╬OW WE ARE GOING TO TAKE A SNAPSHOT OF SOMETHING.
  1686.  
  1687. ═AYBE A LITTLE PICTURE WOULD HELP:                       
  1688.  
  1689.                   ▄
  1690.                   ▄
  1691.                  /▄
  1692.            LENS / ▄FILM
  1693.           -----*--▄------------ Z-AXIS
  1694.               /   ▄
  1695.              /    ▄
  1696.             /    Z=1
  1697.    OBJECT :-)                           (THEN AGAIN, MAYBE IT WON'T!)
  1698.  
  1699.         ╫HAT DOES THIS OBJECT LOOK LIKE ON THE FILM?
  1700.  
  1701. ╠ET'S SAY ONE OF THE POINTS OF THIS SOMETHING IS [X Y Z].  ╫HERE DOES THIS
  1702. POINT COME OUT ON THE FILM?  ╙INCE THE LENS IS AT THE ORIGIN, WE WANT TO
  1703. DRAW THE LINE FROM [X Y Z] THROUGH THE ORIGIN (SINCE THAT'S WHERE OUR LENS
  1704. IS) AND FIND THE POINT [X1 Y1 1] WHERE IT HITS THE FILM.  ╘HE PARAMETRIC
  1705. EQUATION OF THIS LINE IS
  1706.  
  1707.                 T * [X Y Z]
  1708.  
  1709. SO THAT WE WANT TO FIND THE INTERSECTION OF THIS LINE AND THE FILM:
  1710.  
  1711.                 T * [X Y Z] = [X1 Y1 1].
  1712.  
  1713. ╘HE Z-COORDINATE TELLS US THAT T*Z=1, OR T=1/Z.  ╔F WE THEN SUBSTITUTE THIS
  1714. IN THE ABOVE EQUATION, WE FIND THAT
  1715.  
  1716.                 X1 = X/Z        Y1 = Y/Z
  1717.  
  1718. ╔F, INSTEAD OF PLACING THE FILM AT Z=1 WE PLACE IT AT Z=D, WE GET
  1719.  
  1720.                 X1 = D*X/Z      Y1 = D*Y/Z
  1721.  
  1722. ╘HESE THEN ARE THE PROJECTION EQUATIONS.  ╟EOMETRICALLY YOU CAN SEE THAT BY
  1723. CHANGING D ALL YOU WILL DO IS TO "MAGNIFY" THE OBJECT ON THE FILM. ┴NYONE
  1724. WHO HAS WATCHED AN ECLIPSE WITH A LITTLE PINHOLE CAMERA HAS SEEN THIS.
  1725.  
  1726. ┬Y THE WAY, IF YOU STARE AT THE ABOVE PICTURE FOR A WHILE, YOU MAY REALIZE
  1727. THAT, IN THAT GEOMETRIC MODEL, THE OBJECT GETS TURNED UPSIDE-DOWN ON THE
  1728. FILM.
  1729.  
  1730. ╬OW THAT WE HAVE A PHYSICAL MODEL OF THE EQUATIONS THAT HAVE BEEN THROWN
  1731. AROUND, LET'S LOOK AT WHAT WE'VE BEEN DOING.
  1732.  
  1733. ├ONSIDER A CUBE CENTERED AT THE ORIGIN.  ┴LREADY THERE IS A PROBLEM ABOVE IF
  1734. Z=0.  ╫HAT IF ONE SIDE OF THE CUBE HAS PART OF IT'S FACE BELOW THE X-Y PLANE
  1735. (NEGATIVE Z) AND PART ABOVE THE X-Y PLANE?  ╔F YOU DRAW ANOTHER PICTURE AND
  1736. TRACE RAYS THROUGH THE ORIGIN, YOU'LL SEE ONE PART OF THE FACE AT ONE END OF
  1737. THE FILM (NEGATIVE Z, SAY), AND THE OTHER PART WAY THE HECK OUT AT THE OTHER
  1738. END!  ┴ND THE TWO PARTS DON'T TOUCH, EITHER!
  1739.  
  1740. ╙O WE NEED TO BE CAREFUL.  ╔N THE GEOMETRIC PICTURE ABOVE, WE ASSUMED THE
  1741. OBJECT WAS A FAIR DISTANCE AWAY FROM THE LENS.  ├URRENTLY WE HAVE OUR LENS
  1742. AT THE CENTER OF OUR CUBE, SO SOMETHING NEEDS TO MOVE! ╙INCE ROTATIONS ARE
  1743. DEFINED ABOUT THE ORIGIN WE CAN'T JUST REDEFINE THE CUBE SO THAT THE
  1744. VERTICES ARE OUT AT, SAY, Z=2 AND Z=3.  ╙O WHAT WE NEED TO DO IS TO MOVE THE
  1745. CAMERA AWAY FROM THE CUBE.  ╧R, IF YOU WANT TO THINK OF IT ANOTHER WAY, WE
  1746. NEED TO MOVE THE CUBE AWAY FROM THE CAMERA BEFORE WE TAKE A PICTURE OF IT.
  1747.  
  1748. ╔N THIS CASE THE TRANSLATION NEEDS TO BE DONE IN THE Z-DIRECTION. ╘HE NEW
  1749. PROJECTION EQUATIONS ARE THEN
  1750.  
  1751.                 X1 = D*X/(Z-Z0) Y1 = D*Y/(Z-Z0)
  1752.  
  1753. ╫HERE Z0 IS A TRANSLATION AMOUNT THAT AT THE VERY LEAST MAKES SURE THAT
  1754. Z-Z0 < 0.
  1755.  
  1756. ╬OW NOT ONLY HAVE WE ELIMINATED POSSIBLE PROBLEMS WITH DIVIDING BY ZERO, BUT
  1757. THE MATHEMATICS NOW MATCH THE PHYSICAL MODEL.
  1758.  
  1759. ╙OME OF YOU MIGHT WANT TO THINK ABOUT THE LESS-PHYSICAL SITUATION OF PUTTING
  1760. THE OBJECT _BEHIND_ THE FILM, I.E. TO THE RIGHT OF THE FILM IN THE ABOVE
  1761. PICTURE.
  1762.  
  1763. ┴S USUAL, THERE ARE SOME DEEPER MATHEMATICS LURKING BEHIND THESE EQUATIONS,
  1764. CALLED PROJECTIVE GEOMETRY.  ╫ALTER ╘AYLOR HAS WRITTEN A BOOK WITH A FINE
  1765. INTRODUCTION TO THE SUBJECT (AT LEAST, ╔ THINK THE BOOK WAS PUBLISHED; MY
  1766. COPY IS AN OLD PREPRINT).
  1767.  
  1768. ╔MPLEMENTATION
  1769. --------------
  1770.  
  1771. ╬OW THAT WE'VE GOT THE THEORY UNDER OUR BELT, WE NEED TO THINK ABOUT
  1772. IMPLEMENTING IT ON THE COMPUTER.  ┴S A CONCESSION TO ALL THE PROGRAMMERS WHO
  1773. IMMEDIATELY SKIPPED TO THIS SECTION, MOST OF THE DISCUSSION WILL BE AT A
  1774. REASONABLY HIGH LEVEL.
  1775.  
  1776. ╧NE THING YOU NEED TO UNDERSTAND IS 8-BIT SIGNED AND UNSIGNED NUMBERS.  ╚ERE
  1777. IS A QUICK REVIEW: AN 8-BIT UNSIGNED NUMBER RANGES FROM 0..255.  ┴N 8-BIT
  1778. SIGNED NUMBER RANGES FROM -128..127 AND IS WRITTEN IN TWO'S-COMPLEMENT FORM. 
  1779. ╔N AN 8-BIT TWO'S-COMPLEMENT NUMBER BITS ZERO THROUGH SIX WORK LIKE THEY
  1780. USUALLY DO, BUT THE SEVENTH (HIGH) BIT REPRESENTS THE SIGN OF THE NUMBER IN
  1781. A SPECIAL WAY.  ╘O FIND THE 8-BIT TWO'S-COMPLEMENT OF A NUMBER SUBTRACT IT
  1782. FROM 256.  ┼XAMPLE: WHAT IS -21 IN TWO'S COMPLEMENT NOTATION?  ╔T IS 256-21
  1783. = 235 = $┼┬.  ╫HAT IS THE COMPLEMENT OF -21?  ╔T IS 256-235 = 21 -- LIKE
  1784. MAGIC.  ┴NOTHER WAY TO THINK ABOUT IT IS LIKE A TAPE COUNTER: 2 IS $02, 1 IS
  1785. $01, 0 IS $00, -1 IS $╞╞, -2 IS $╞┼, ETC.  ┴ND WHAT IS 24-21 IN TWO'S
  1786. COMPLEMENT? ╔T IS: 24 + -21 = $┼┼ + $┼┬ = $0103.  ╘HROW AWAY THE CARRY
  1787. (SUBTRACT 256) AND WE COME OUT WITH... $03!
  1788.  
  1789. ╧NWARDS!
  1790.  
  1791. ╞IRST, WE NEED TO DECIDE WHAT LANGUAGE TO USE.  ┘OU AND ╔ BOTH KNOW THE
  1792. ANSWER HERE: ┬┴╙╔├!  ╧R MAYBE NOT.  ╫E NEED SPEED HERE, AND SPEED ON A
  1793. ├OMMODORE 64 IS SPELLED A-S-S-E-M-B-L-Y.
  1794.  
  1795. ╬EXT, WE NEED TO DECIDE WHAT KIND OF MATH WE WANT TO USE, SIGNED OR
  1796. UNSIGNED.  ╙INCE THE COSINES AND SINES ARE GOING TO GENERATE NEGATIVE AND
  1797. POSITIVE NUMBERS IN FUNNY WAYS, WE DEFINITELY WANT TO USE SIGNED NUMBERS. 
  1798. ╘HE ALTERNATIVE IS TO HAVE LOTS OF CODE AND OVERHEAD TO HANDLE ALL THE
  1799. CASES, AND IF WE PUT IT IN TWO'S-COMPLEMENT FORM THE COMPUTER DOES MOST OF
  1800. THE WORK FOR US.
  1801.  
  1802. ╚OW BIG SHOULD THE NUMBERS BE?  ╙INCE WE ARE GOING FOR SPEED HERE, THE
  1803. OBVIOUS CHOICE IS 8-BITS.  ┬UT THIS RESTRICTS US TO NUMBERS BETWEEN
  1804. -128..127, IS THAT ╧╦?  ╘HE SIZE OF OUR GRID IS 0..127 X 0..127, SO THIS IS
  1805. PERFECT!  ┬UT IT DOES MEAN THAT WE NEED TO BE VERY CAREFUL. ╞OR INSTANCE,
  1806. CONSIDER THE EXPRESSION (A+B)/2.  ╫HAT HAPPENS IF A=B=64? ╘HESE ARE TWO
  1807. NUMBERS WITHIN OUR RANGE OF NUMBERS, AND THE EXPRESSION EVALUATES TO 64,
  1808. WHICH IS ALSO IN OUR RANGE, ┬╒╘: IF YOU EVALUATE THE ABOVE IN TWO'S
  1809. COMPLEMENT FORM, YOU WILL FIND DIFFERENT ANSWERS DEPENDING ON HOW YOU
  1810. EVALUATE IT (I.E. (A+B)/2 WILL NOT GIVE THE SAME ANSWER AS A/2 + B/2, WHICH
  1811. WILL GIVE THE CORRECT ANSWER).
  1812.  
  1813. ╬OW WE'VE GOT ANOTHER PROBLEM: SINE AND COSINE RANGE BETWEEN NEGATIVE ONE
  1814. AND ONE.  ╘O REPRESENT THESE FLOATING POINT NUMBERS AS 8-BIT SIGNED INTEGERS
  1815. THE IDEA WILL BE TO MULTIPLY ALL FLOATING POINT NUMBERS BY A FIXED AMOUNT. 
  1816. ╘HAT IS, INSTEAD OF DEALING WITH THE NUMBER 0.2, WE USE THE NUMBER 64*0.2 =
  1817. 12.8 = 13, AND DIVIDE THE END RESULT BY 64.  ┴S USUAL, WE ARE TRADING
  1818. ACCURACY FOR SPEED, ALTHOUGH IT WILL TURN OUT TO MAKE LITTLE DIFFERENCE
  1819. HERE.
  1820.  
  1821. ╫HY DID ╔ PICK 64?  ╧BVIOUSLY WE WANT TO PICK SOME FACTOR OF TWO TO MAKE THE
  1822. DIVISION AT THE END SIMPLE (JUST AN ╠╙╥).  128 IS TOO BIG.  32 DOESN'T GIVE
  1823. US MUCH ACCURACY.  ╫E ALSO HAVE TO CONSIDER PROBLEMS IN EXPRESSION
  1824. EVALUATION (SEE THE ABOVE EXAMPLE OF (A+B)/2), BUT AS WE SHALL SEE 64 WILL
  1825. WORK OUT NICELY.
  1826.  
  1827. ╬OW THAT WE HAVE ACCOMPLISHED THE DIFFICULT TASK OF DECISION MAKING, WE NOW
  1828. NEED TO MOVE ON TO THE SIMPLE TASK OF IMPLEMENTATION, STARTING WITH
  1829. ROTATIONS.
  1830.  
  1831. ╔MPLEMENTATION: ╥OTATIONS
  1832. -------------------------
  1833.  
  1834. ╫E'VE GOT SOME MORE HEAVY-DUTY DECISION MAKING AHEAD OF US. ╫E COULD
  1835. IMPLEMENT THIS IS SEVERAL WAYS.  ╫E COULD APPLY EACH ROTATION INDIVIDUALLY,
  1836. THAT IS, WE COULD ROTATE AROUND THE Z-AXIS, THEN USE THESE ROTATED POINTS
  1837. AND ROTATE THEM AROUND THE Y-AXIS, ETC.
  1838.  
  1839. ╫ELL, YES, THAT WOULD WORK, BUT... EACH ROTATION IS NINE MULTIPLICATIONS. 
  1840. ┼ACH MULTIPLICATION INVOLVES A LOT OF WORK, PLUS WE HAVE TO SHIFT THE RESULT
  1841. BY OUR FIXED AMOUNT EACH TIME.  ╫E WOULD NOT ONLY BE USING HUGE AMOUNTS OF
  1842. TIME, BUT WE WOULD LOSE A LOT OF ACCURACY IN THE PROCESS.  ├OMPUTATIONALLY
  1843. SPEAKING, THIS IS CALLED A "BAD IDEA".
  1844.  
  1845. ╧NCE AGAIN, MATHEMATICS SAVES THE DAY: HERE IS WHERE WE GET THE PAYOFF FOR
  1846. WRITING THE EQUATIONS AS AN ALGEBRAIC SYSTEM (A MATRIX).  ╔F ╪ IS THE
  1847. TRANSFORMATION AROUND THE X-AXIS, ┘ THE TRANSFORMATION AROUND THE Y-AXIS,
  1848. AND ┌ THE TRANSFORMATION AROUND THE Z-AXIS, THEN THIS IS THE EQUATION TO
  1849. TRANSFORM A VECTOR V BY ROTATING THE POINT FIRST AROUND THE Z-AXIS, THEN THE
  1850. Y-AXIS, THEN THE X-AXIS:
  1851.  
  1852.         ╪┘┌V = V'
  1853.  
  1854. WHERE V' IS THE NEW POINT AFTER ALL THE ROTATION TRANSFORMATIONS. (┘OU MIGHT
  1855. CALL IT A CONFLAGRATION OF ROTATION TRANSFORMATIONS). ╬OW THE MAGIC OF
  1856. LINEAR ALGEBRA BEGINS TO WORK: OPERATIONS ARE ASSOCIATIVE, WHICH IS A FANCY
  1857. WAY OF SAYING THAT (┴┬)├ = ┴(┬├); ╞OR US THIS MEANS THAT ╔ CAN MULTIPLY ALL
  1858. THREE MATRICES ╪ ┘ AND ┌ TOGETHER TO GET A SINGLE NEW MATRIX ═:
  1859.  
  1860.         ═ = ╪┘┌
  1861.         ═V= V'
  1862.  
  1863. "┬UT," YOU MAY SAY, "WE HAVE TO DO THE SAME NUMBER OF MULTIPLICATIONS TO GET
  1864. ═ AS WE DO TO APPLY EACH ROTATION SEPARATELY!  ╚OW IS THIS SUPPOSED TO
  1865. HELP?"  ╘HIS IS HOW IT IS SUPPOSED TO HELP:
  1866.  
  1867.         1) ╫E NOW HAVE A SINGLE MATRIX WHICH DESCRIBES ┴╠╠ THE ROTATIONS.
  1868.            ╞OR A SINGLE POINT WE HAVEN'T GAINED MUCH, BUT IF WE HAVE
  1869.            A LOT OF POINTS (AND A CUBE HAS EIGHT), TRANSFORMING EVERY
  1870.            POINT IS NOW A SINGLE MATRIX MULTIPLICATION.  ╔N OTHER WORDS,
  1871.            IF WE HAVE A LOT OF POINTS TO TRANSFORM WE GET A ╚╒╟┼ SAVINGS
  1872.            COMPUTATIONALLY.
  1873.  
  1874.         2) ╫E CAN TAKE ADVANTAGE OF TRIGONOMETRIC IDENTITIES AND IN SO
  1875.            DOING MAKE THE COMPUTATION OF ═ VERY SIMPLE.
  1876.  
  1877. ├OMPUTATIONALLY SPEAKING, THIS IS KNOWN AS A "GOOD IDEA".
  1878.  
  1879. ╘O MULTIPLY THE THREE ROTATION MATRICES TOGETHER, WE NEED TO TAKE ADVANTAGE
  1880. OF A FEW TRIGONOMETRIC PROPERTIES.  ╫E NEED THE TWO IDENTITES MENTIONED
  1881. EARLIER:
  1882.  
  1883.         SIN(A+B) = SIN(A)COS(B) + COS(A)SIN(B)
  1884.         COS(A+B) = COS(A)COS(B) - SIN(A)SIN(B)
  1885.  
  1886. ╫E WILL ALSO USE THE FACT THAT COSINE IS EVEN AND SINE IS ODD, THAT IS
  1887.  
  1888.         COS(-A) = COS(A)
  1889.         SIN(-A) = -SIN(A)
  1890.  
  1891. ╒SING THE ABOVE IDENTITIES IT IS EASY TO SEE THAT
  1892.  
  1893.         SIN(A)SIN(B) = (COS(A-B) - COS(A+B))/2
  1894.         COS(A)COS(B) = (COS(A+B) + COS(A-B))/2
  1895.         SIN(A)COS(B) = (SIN(A+B) + SIN(A-B))/2
  1896.  
  1897. ╫E ARE GOING TO ROTATE FIRST AROUND THE Z-AXIS BY AN AMOUNT SZ, THEN THE
  1898. Y-AXIS BY AN AMOUNT SY, THEN THE X-AXIS BY AN AMOUNT SX.  ╫HY ROTATE IN THAT
  1899. ORDER?  ╫HY NOT.
  1900.  
  1901.         ═ = ╪┘┌
  1902.  
  1903. ╔F YOU MULTIPLY EVERYTHING OUT (AND ╔ ENCOURAGE YOU TO DO SO, NOT ONLY FOR
  1904. PRACTICE, BUT ALSO AS A DOUBLE-CHECK OF MY WORK), AND USE THE ABOVE TRIG
  1905. IDENTITIES, THE RESULT IS:
  1906.  
  1907.             [┴ ┬ ├]
  1908.         ═ = [─ ┼ ╞]
  1909.             [╟ ╚ ╔]
  1910.  
  1911. ╫HERE
  1912.         ┴ = (COS(T1)+COS(T2))/2
  1913.         ┬ = (SIN(T1)-SIN(T2))/2
  1914.         ├ = SIN(SY)
  1915.         ─ = (SIN(T3)-SIN(T4))/2 + (COS(T6)-COS(T5)+COS(T8)-COS(T7))/4
  1916.         ┼ = (COS(T3)+COS(T4))/2 + (SIN(T5)-SIN(T6)-SIN(T7)-SIN(T8))/4
  1917.         ╞ = (SIN(T9)-SIN(T10))/2
  1918.         ╟ = (COS(T4)-COS(T3))/2 + (SIN(T6)-SIN(T5)-SIN(T8)-SIN(T7))/4
  1919.         ╚ = (SIN(T3)+SIN(T4))/2 + (COS(T6)-COS(T5)+COS(T7)-COS(T8))/4
  1920.         ╔ = (COS(T9)+COS(T10))/2
  1921.  
  1922. WITH
  1923.         T1 = SY-SZ
  1924.         T2 = SY+SZ
  1925.         T3 = SX+SZ
  1926.         T4 = SX-SZ
  1927.         T5 = SX+SY+SZ = SX+T2
  1928.         T6 = SX-SY+SZ = SX-T1
  1929.         T7 = SX+SY-SZ = SX+T1
  1930.         T8 = SY+SZ-SX = T2-SX
  1931.         T9 = SY-SX
  1932.         T10= SY+SX
  1933.  
  1934. ╚OW IS THIS SUPPOSED TO BE THE "SIMPLIFIED" VERSION?  ╔F YOU LOOK CLOSELY,
  1935. THERE ARE NO MULTIPLIES.  ╫E CAN CALCULATE THE ENTIRE ROTATION MATRIX ═ IN
  1936. ABOUT THE SAME TIME AS IT WOULD TAKE TO DO TWO MULTIPLICATIONS. ╘HIS ALSO
  1937. MEANS THAT THE ASSOCIATED PROBLEM WITH MULTIPLICATIONS, LOSS OF ACCURACY, IS
  1938. NOW GONE.
  1939.  
  1940. ╚ERE IS ALSO WHERE WE NEED TO BE EXTREMELY CAREFUL.  ╘HE FIRST ENTRY IN THE
  1941. MATRIX ═ IS THE EXAMPLE ╔ GAVE EARLIER ABOUT EVALUATING SIGNED NUMBERS.  ╚OW
  1942. DO WE OVERCOME THIS?
  1943.  
  1944. ┼ASY!  ╬OTICE IN THE MATRIX ═ THAT, APART FROM ELEMENT ├, EVERY TERM IS A
  1945. SINE OR A COSINE DIVIDED BY TWO.  ╘HIS IS THE ONLY PART OF THE PROGRAM WHICH
  1946. USES SINES AND COSINES, SO WHY NOT USE THE OFFSET FLOATING-POINT VALUES
  1947. DIVIDED BY TWO?  ╘HIS WILL MAKE MORE SENSE IN A MINUTE.
  1948.  
  1949. ╘HE QUESTION ARISES: THE ABOVE IS ALL WELL AND GOOD, BUT HOW DO WE TAKE THE
  1950. SINE OF A NUMBER AND MAKE IT FAST?  ╘HE ANSWER OF COURSE IS TO USE A TABLE. 
  1951. ╫E USED A ┬┴╙╔├ ROUTINE TO CALCULATE THE TABLE FOR US (AND TO STORE THE
  1952. NUMBERS IN TWO'S-COMPLEMENT FORM).  ├ALCULATE THE SINE AND COSINE OF EVERY
  1953. ANGLE YOU WANT AHEAD OF TIME, AND THEN JUST LOOK UP THE NUMBER.
  1954.  
  1955. ╘HE TABLES CONTAIN THE VALUES OF SINE AND COSINE MULTIPLIED BY 64 (OUR
  1956. FLOATING-POINT OFFSET) AND THEN DIVIDED BY 2.  ╙INCE THE VALUE IS ALREADY
  1957. DIVIDED BY TWO, THE ABOVE CALCULATION BECOMES AT THE SAME TIME FASTER AND
  1958. SAFER: FASTER BECAUSE ╔ DON'T HAVE TO KEEP DIVIDING BY TWO, AND SAFER
  1959. BECAUSE ╔ DON'T HAVE TO WORRY SO MUCH ABOUT OVERFLOW.  (╔T CAN STILL HAPPEN,
  1960. BUT IT WON'T IF YOU'RE CAREFUL).
  1961.  
  1962. ╚ERE IS AN EXAMPLE OF HOW TO CALCULATE ELEMENTS ┴ AND ┬ ABOVE:
  1963.  
  1964.         ╠─┴ SY
  1965.         ╙┼├
  1966.         ╙┬├ SZ
  1967.         ...
  1968.         ╙╘┴ T1          ;T1=SY-SZ
  1969.         ╠─┴ SY
  1970.         ├╠├
  1971.         ┴─├ SZ
  1972.         ...
  1973.         ╙╘┴ T2          ;T2=SY+SZ
  1974.         ...
  1975.         ╠─╪ T1
  1976.         ╠─┴ ├╧╙,T1      ;├╧╙ IS A TABLE OF COSINES*OFFSET/2
  1977.         ╠─╪ T2
  1978.         ├╠├
  1979.         ┴─├ ├╧╙,T2
  1980.         ╙╘┴ ┴           ;┴=(COS(T1)+COS(T2))/2
  1981.         ╠─╪ T1
  1982.         ╠─┴ ╙╔╬,T1
  1983.         ╠─╪ T2
  1984.         ╙┼├
  1985.         ╙┬├ ╙╔╬,T2
  1986.         ╙╘┴ ┬           ;┬=(SIN(T1)-SIN(T2))/2
  1987.         ...             ;╥ESULT IS OFFSET BY A CERTAIN AMOUNT
  1988.  
  1989. ╬OTE THAT THE ELEMENTS ─ ┼ ╟ AND ╚ INVOLVE A DIVISION BY FOUR, WHICH MEANS
  1990. THAT THE CODE DOES NEED TO PERFORM A DIVISION BY TWO DURING THE CALCULATION
  1991. OF THOSE ELEMENTS.
  1992.  
  1993. ╘HAT'S ALL THERE IS TO CALCULATING THE ROTATION MATRIX.  ╬EXT WE HAVE TO
  1994. ACTUALLY ROTATE THE POINTS.  ╫E HAVE ANOTHER DECISION TO MAKE: DO WE TAKE
  1995. THE ROTATED OBJECT AND ROTATE IT BY A LITTLE AMOUNT, OR DO WE TAKE THE
  1996. ORIGINAL OBJECT AND ROTATE IT BY A BIG AMOUNT?  ┬ECAUSE OF THE WAY WE HAVE
  1997. SET THINGS UP, THE ANSWER IS CLEAR: WE WANT TO INCREMENT THE ANGLE AT EACH
  1998. STEP, AND ROTATE THE ORIGINAL OBJECT BY THIS LARGE ANGLE (BESIDES,
  1999. GEOMETRICALLY YOU CAN SEE THAT IT WILL LOOK MUCH NICER THIS WAY).
  2000.  
  2001.         ╞OR A CUBE THIS IS EASY.  ╘HE POINTS ARE ╨1=[1 1 1] ╨2=[1 -1 1]
  2002. ╨3=[-1 -1 1] ╨4=[-1 1 1] ╨5=[1 1 -1] ╨6=[1 -1 -1] ╨7=[-1 -1 -1] ╨8=[-1 1 -1].
  2003. ╘HIS MEANS THAT THE ROTATIONS ARE JUST A SERIES OF ADDITIONS AND/OR
  2004. SUBTRACTIONS OF ┴,┬,├,...,╔!  ╘HE CODE IMPLEMENTS THIS IN A FUNNY WAY,
  2005. PARTLY TO MAKE THESE PROCEDURES EASY TO SEE, BUT MOSTLY TO MAKE DEBUGGING
  2006. THE CODE MUCH EASIER.  ╔T IS MUCH FASTER TO DO EACH ROTATION SEPARATELY,
  2007. I.E.
  2008.  
  2009. :╨1     ╠─┴ ┴
  2010.         ┴─├ ┬
  2011.         ┴─├ ├
  2012.         ╙╘┴ ╨1.╪
  2013.         ...
  2014.  
  2015. :╨2     ╠─┴ ┴
  2016.         ╙┬├ ┬
  2017.         ┴─├ ├
  2018.         ╙╘┴ ╨2.╪
  2019.         ...
  2020. :╨3     ╠─┴ ├
  2021.         ╙┬├ ┴
  2022.         ╙┬├ ┬
  2023.         ╙╘┴ ╨3.╪
  2024.  
  2025. ┘OU GET THE IDEA.  ╧F COURSE, THE CODE NEEDS TO REMEMBER THAT IT IS DEALING
  2026. WITH SIGNED NUMBERS, AND TO WATCH CARRY FLAGS CAREFULLY (SOMETHING THE ABOVE
  2027. FRAGMENT DOES NOT DO).
  2028.  
  2029. ╙TILL WORRIED ABOUT OVERFLOW?  ╔F YOU THINK ABOUT IT GEOMETRICALLY, YOU WILL
  2030. SEE THAT THE MAXIMUM VALUE ANY PART OF A ROTATED COORDINATE CAN HAVE IS
  2031. SQRT(3).  ╙INCE WE HAVE OFFSET OUR NUMBERS BY 64, THIS MEANS THAT, FOR
  2032. INSTANCE, THE MAXIMUM POSSIBLE VALUE FOR ┴+┬+├ IS 64*SQRT(3) WHICH IS ABOUT
  2033. 111 -- IN RANGE OF A SIGNED 8-BIT NUMBER WITH A LITTLE CUSHION FOR
  2034. ADDITIONS.  ╔N OTHER WORDS, WE OUGHT TO BE SAFE FROM OVERFLOW.
  2035.  
  2036. ╙O FAR WE HAVE MANAGED TO ROTATE ALL THE COORDINATES -- A COMPLICATED SERIES
  2037. OF MATRIX OPERATIONS INVOLVING TRIGONOMETRIC FUNCTIONS -- BY JUST USING A
  2038. BUNCH OF ADDITIONS AND A BUNCH OF TABLE LOOKUPS!  ╬OT TOO BAD! ╬OW WE JUST
  2039. NEED TO PROJECT THE POINT.
  2040.  
  2041. ╔MPLEMENTATION: ╨ROJECTIONS
  2042. ---------------------------
  2043.  
  2044. ╥ECALL THAT THE PROJECTION EQUATION IS
  2045.                         
  2046.                         X' = D*X/(Z-Z0)
  2047.                         Y' = D*Y/(Z-Z0)
  2048.  
  2049. ╔T LOOKS AS IF WE HAVE GONE FROM A BUNCH OF SNEAKY ADDITIONS TO 
  2050. MULTIPLICATIONS AND DIVISIONS!  ┘UCK.
  2051.  
  2052. ╫ELL, WAIT A MINUTE, MAYBE WE CAN DO SOMETHING.  ╚OW ABOUT USING A TABLE FOR
  2053. 1/(Z-Z0), AND THEN JUST USE A MULTIPLY?  ╧H YEAH, THAT'S A REALLY SMALL
  2054. NUMBER.  ┴S LONG AS WE'RE USING A TABLE, WHY NOT INCORPORATE THE D INTO IT? 
  2055. ├OME TO THINK OF IT, IF THE NUMBER WEREN'T MULTIPLIED BY THE OFFSET 64 IT
  2056. WOULD BE A PRETTY REASONABLE NUMBER!
  2057.  
  2058. ╙O, WHAT WE WANT TO DO IS TO CONSTRUCT A TABLE OF NUMBERS SUCH THAT WHEN THE
  2059. PROGRAM CALLS
  2060.         
  2061.         ╠─╪ Z
  2062.         ╠─┴ TABLE,Z
  2063.  
  2064. IT GETS THE ABSOLUTE (I.E. NON-OFFSET) VALUE ┴=D/(Z-Z0).  ╫HAT IF WE WANT TO
  2065. CHANGE D?  ┘OU COULD PUT A LITTLE PIECE OF CODE INTO YOUR PROGRAM WHICH
  2066. MULTIPLIES BY A NUMBER LESS THAN ONE, AND LET D REPRESENT THE MAXIMUM VALUE
  2067. FOR D WHICH MAKES THE CODE WORK.  ┬UT FOR THE MOMENT WE WON'T BOTHER WITH
  2068. THAT -- ONE THING AT A TIME!
  2069.  
  2070. ╙INCE Z IS A SIGNED NUMBER, WE OUGHT TO ADD 128 TO IT TO CONVERT IT INTO AN
  2071. INDEX.  ─OES THIS HAVE ANY MEANING IN TWO'S-COMPLEMENT ARITHMETIC?  ┘UP.  ╫E
  2072. ALSO NEED TO REMEMBER THAT FLOATS ARE OFFSET BY 64, AND THAT THE HIGHEST
  2073. VALUE A SIGNED NUMBER CAN HAVE IS 127.
  2074.  
  2075. ╚ERE IS HOW THE TABLE IS GENERATED:
  2076.  
  2077.         10 BZ=WHATEVER
  2078.         20 D=45:Z0=3:Z=-128:DZ=1
  2079.         30 FOR I=0 TO 255
  2080.         40 Q%=64*D/(64*Z0-Z):IF Q%>127 THEN Q%=127
  2081.         50 POKE BZ+I,Q%:Z=Z+DZ
  2082.         60 NEXT
  2083.  
  2084. ╬OTE THAT THE OFFSET CHOSEN FORCES Q% TO ALWAYS BE POSITIVE.  ╘HIS FACT CAN
  2085. BE MADE USE OF IN THE MULTIPLICATION ROUTINE (BUT ISN'T IN THE SOURCE CODE).
  2086.  
  2087. ┘OU MAY HAVE NOTICED THAT Z0-Z IS USED, AND NOT Z-Z0 LIKE IN THE PROJECTION
  2088. EQUATION.  ╔F YOU PUT ON YOUR GEOMETRIC THINKING CAP FOR A MOMENT, YOU WILL
  2089. REALIZE THAT THE WAY THE PROJECTION EQUATIONS WERE SET UP CAUSES THE IMAGE
  2090. TO BECOME INVERTED.  ╘O UNINVERT IT, WE NEED TO MULTIPLY BY NEGATIVE ONE. 
  2091. ╙O WE JUST ADD THAT STEP INTO THE TABLE.
  2092.  
  2093. ┬UT WE STILL NEED TO DO A MULTIPLICATION!
  2094.  
  2095. ╞AST ╙IGNED 8-BIT ═ULTIPLY
  2096. --------------------------
  2097.  
  2098. ┴ BINARY NUMBER LOOKS LIKE THE FOLLOWING:
  2099.  
  2100.         ╨ = 1*128 + 0*64 + 0*32 + 1*16 + 1*8 + 0*4 + 0*2 + 0*1
  2101.  
  2102. ╘HEREFORE, IF WE WANT TO MULTIPLY ╨ BY ANOTHER NUMBER, 13 SAY, WE FIND THAT
  2103.         
  2104.         13*╨ = 13*128 + 0*64 + 0*32 + 13*16 + ...
  2105.  
  2106. THAT IS TO SAY, IF THERE IS A ONE IN BIT POSITION ╬, THEN THE NEW NUMBER
  2107. WILL HAVE 13*2^╬ IN IT.  ╙O, TO MULTIPLY TWO NUMBERS WE FIND OUT WHAT BIT
  2108. POSITIONS ARE HIGH, AND THEN ADD THE OTHER NUMBER*2^╬ TO THE RESULT. ╘HIS
  2109. DOESN'T SEEM TOO FAST.  ╚ERE IS A TRICK: WE CAN WRITE 2^╬ AS 256/2^(8-╬). 
  2110.  
  2111. ╙O, LET'S SAY WE WANT TO MULTIPLY THE NUMBER ╨ BY THE NUMBER ╥.  ╔F ╨ HAS A
  2112. HIGH BIT IN POSITION ╬, WE CAN START OUT WITH 256*╥, AND BIT-SHIFT IT TO THE
  2113. RIGHT 8-╬ TIMES.  ╫HY IN THE WORLD WOULD WE DO THIS? ┬ECAUSE WE CAN
  2114. _PIPELINE_ THE PROCESS IN A WAY SOMEWHAT SIMILAR TO THE WAY A ├RAY
  2115. SUPERCOMPUTER MULTIPLIES TWO VECTORS TOGETHER -- YES, ╔'M COMPARING YOUR
  2116. ├-64 TO A ├RAY!  ╫ATCH:
  2117.  
  2118. *
  2119. * 8-BIT MULTIPLY -> 16-BIT RESULT
  2120. *
  2121. * ┴├├*┴╒╪ -> [┴╒╪,┼╪╘]  LO,HI
  2122.  
  2123. ═╒╠╘    ╠─┴ #$00
  2124.         ╠─┘ #$09
  2125. ]╠╧╧╨   ╠╙╥
  2126.         ╥╧╥ ┴├├
  2127.         ┬├├ ═╒╠╘2
  2128.         ├╠├
  2129.         ┴─├ ┴╒╪
  2130. ═╒╠╘2   ─┼┘
  2131.         ┬╬┼ ]╠╧╧╨
  2132.         ╙╘┴ ┼╪╘
  2133.  
  2134. ╨RETTY SLICK.  ╬OW WE NEED TO MODIFY IT FOR SIGNED NUMBERS.  ┴LL WE NEED TO
  2135. DO IS CHECK TO SEE IF THE RESULT IS POSITIVE OR NEGATIVE. ╔F IT'S POSITIVE,
  2136. WE CHECK ONE NUMBER (THEY ARE EITHER BOTH POSITIVE OR BOTH NEGATIVE), AND IF
  2137. IT'S NEGATIVE WE FIX THEM BOTH TO BE POSITIVE, AND USE THE ABOVE PROCESS. 
  2138. ╔F THE RESULT IS GOING TO BE NEGATIVE, WE NEED TO FIND THE NEGATIVE NUMBER,
  2139. MAKE IT POSITIVE, MULTIPLY THE TWO NUMBERS TOGETHER, AND MAKE THE FINAL
  2140. RESULT NEGATIVE (TAKE THE TWO'S-COMPLEMENT OF THE RESULT).
  2141.  
  2142. ╙EE THE SOURCE CODE FOR AN IMPLEMENTATION OF THIS.
  2143.  
  2144. ╬OTE THAT WE COULD DO A DIVIDE IN A SIMILAR FASHION, EXCEPT SHIFTING LEFT
  2145. INSTEAD OF RIGHT.  ╙INCE WE DON'T NEED A DIVIDE ROUTINE FOR OUR CALCULATIONS
  2146. WE DON'T NEED TO WORRY ABOUT THIS.
  2147.  
  2148. ╬OW WE HAVE ALL THE TOOLS WE NEED TO IMPLEMENT THE MATHEMATICS. ╘HERE IS
  2149. STILL ONE PART OF THE PROGRAM LEFT: DRAWING THE THING!
  2150.  
  2151. ─RAWING A LINE
  2152. --------------
  2153.  
  2154. ╘HE GEOMETRIC IDEA IS: GIVEN AN INITIAL POINT [X1 Y1], WE WANT TO DRAW A
  2155. LINE TO THE POINT [X2 Y2]!  ╬OW WE WANT TO DO THIS ON A COMPUTER BY TAKING
  2156. ONE STEP AT A TIME, FROM POINT TO POINT.  ╘HE IDEA IS TO MAKE IT FAST, AND
  2157. SINCE WE'RE ON A ├64 THERE AREN'T ANY ═╒╠ OR ─╔╓ INSTRUCTIONS.
  2158.  
  2159. ╘O DO THIS, WE FIRST NEED TO FIND OUT WHICH IS LARGER:
  2160.  
  2161.         DX = ▄X2-X1▄
  2162.         DY = ▄Y2-Y1▄
  2163.  
  2164. WHERE ▄ ▄ DENOTES ABSOLUTE VALUE.  ╠ET'S ASSUME THAT IT IS DX, AND THAT THE
  2165. VARIABLE X IS GOING TO RUN FROM X1 TO X2.  ╘HEREFORE, WE WANT TO INCREASE X
  2166. BY ONE AT EACH STEP, AND WE WANT TO INCREASE Y BY SOME FRACTIONAL AMOUNT (╔F
  2167. DY WERE LARGER WE WOULD WANT TO TAKE BIG STEPS IN THE Y-DIRECTION). ┬UT WE
  2168. DON'T WANT TO CALCULATE THIS FRACTIONAL NUMBER.  ╫E DO, HOWEVER, WANT TO
  2169. TAKE A CERTAIN AMOUNT OF STEPS IN THE X-DIRECTION BEFORE TAKING A STEP IN
  2170. THE Y-DIRECTION.
  2171.  
  2172. ╔F WE TAKE K STEPS IN X BEFORE TAKING A STEP IN Y, THEN WE WANT TO CHOSE K
  2173. SUCH THAT
  2174.  
  2175.         DX/K = DY
  2176.  
  2177. WHICH GIVES
  2178.  
  2179.         K = DX/DY
  2180.  
  2181. WHERE DX AND DY ARE AS ABOVE, THE TOTAL NUMBER OF STEPS TO BE TAKEN IN THE
  2182. X- AND Y-DIRECTIONS RESPECTIVELY.  ╫HAT IS DX/DY?  ╫E DON'T CARE.  ╔NSTEAD,
  2183. EVERY TIME WE STEP IN X, WE NEED TO INCREASE A COUNTER BY THE AMOUNT DY. ┴S
  2184. SOON AS THIS COUNTER IS LARGER THAN DX, WE HAVE SUCCESSFULLY DIVIDED DY INTO
  2185. DX, AND SO SIMPLY RESET THE COUNTER (IN A SPECIAL WAY, SO THAT WE KEEP ANY
  2186. REMAINDER FROM THE DIVISION) AND TAKE A STEP IN Y.
  2187.  
  2188. ╧F COURSE, IF DY WERE LARGER THAN DX, THE IDEA WOULD BE THE SAME, BUT NOW K
  2189. = DY/DX.  K IS NEVER SMALLER THAN ONE.
  2190.  
  2191. ╔N THE CODE FRAGMENT WHICH FOLLOWS IT IS ASSUMED THAT X2>X1,  Y2>Y1, AND
  2192. DX>DY.  ╧BVIOUSLY, THEN, ANY SELF-RESPECTING LINE DRAWING ROUTINE NEEDS TO
  2193. HANDLE ALL OF THESE CASES.  ╧NE WAY IS TO HAVE EIGHT DIFFERENT ROUTINES, ONE
  2194. FOR EACH CASE.  ┴NOTHER WAY (THE WAY USED BY THE PROGRAM), IS TO FORCE
  2195. X2>X1, SO THAT THERE ARE ONLY FOUR CASES TO DEAL WITH.  ╞OR THE PLOTTING
  2196. ROUTINE WHICH WE USE, THIS TURNS OUT TO BE NECESSARY.  ╔F YOU THINK ABOUT
  2197. IT, YOU CAN COME UP WITH SOME MORE CLEVER WAYS TO DEAL WITH THIS.
  2198.  
  2199. ╬OTE THAT YOU ALSO NEED TO FIGURE OUT WHAT COLUMN THE FIRST POINT IS IN:
  2200. THIS ALGORITHM KNOWS HOW TO WALK FORWARDS, BUT IT DOESN'T KNOW WHERE IT
  2201. SHOULD START.
  2202.  
  2203. ╘HE CODE IS NEXT TO SOME SIMILAR ┬┴╙╔├7.0 CODE TO MAKE IT EASIER TO
  2204. UNDERSTAND.
  2205.  
  2206. ╘HE CODE CAN BE SPED UP IN A LOT OF WAYS.  ╞OR ONE THING IT COULD BE MADE
  2207. SELF-MODIFYING.  ┴LL VARIABLES COULD BE STORED IN ZERO PAGE. ╔N FACT, THE
  2208. ENTIRE ROUTINE COULD BE STORED IN ZERO PAGE!  ┴LSO, WITH A LITTLE CHANGE IN
  2209. THE LOGIC (AND A SUBSEQUENT CHANGE IN THE PLOTTING ROUTINE) YOU CAN
  2210. ELIMINATE THE BRANCHING INSTRUCTION.  ╞OR THE SAKE OF CLARITY WE DON'T DO
  2211. THAT HERE; MAYBE IN ANOTHER PAPER ;-).
  2212.  
  2213. ┴LSO NOTE THAT THE LARGEST VALUE X CAN TAKE ON IN THIS ROUTINE IS 255.  ╞OR
  2214. THE WAY WE ARE GOING TO PLOT THINGS, THIS WON'T MATTER. ┬UT A MORE GENERAL
  2215. ROUTINE NEEDS A WAY TO OVERCOME THIS.  ╧NE WAY WOULD BE TO DRAW TWO SEPARATE
  2216. LINES.
  2217.  
  2218. 10 ╥┼═ ┴LL OF THE ABOVE COMMENTS ;-)
  2219. 20 ╥┼═ ╔NPUT X1,X2,Y1,Y2
  2220. 30 ╟╥┴╨╚╔├1,1:─╥┴╫1,X1,Y1:─╥┴╫1,X2,Y2
  2221. 31 :╥┼═ ABOVE IS A DOUBLE-CHECK         ;─RAWIN' A LINE
  2222. 39 ╥┼═ ╙ET UP VARIABLES                 ;V1.3 ╙╠╩ 7/2/94
  2223. 40 ─╪ = ╪2-╪1                           ╠─┴     $(╪2)   ;╪2 IN ZERO PAGE
  2224.                                         ╙┬├     $(╪1)
  2225.                                         ╙╘┴     ─╪      ;╞OR SPEED, STORE
  2226. 50 ─┘ = ┘2-┘1                           ╠─┴     $(┘2)   ;DIRECTLY INTO CODE
  2227.                                         ╙┬├     $(┘1)   ;BELOW
  2228.                                         ╙╘┘     ─┘
  2229. 60 ╪=╪1:┘=┘1                            ╠─╪     $(╪1)   ;╨LOTTING COORDINATES
  2230.                                         ╠─┘     $(┘1)   ;IN ╪ AND ┘
  2231. 64 ╥┼═ ┴ COUNTS STEPS IN X
  2232. 65 ╥┼═ ┬ELOW YOU MIGHT WANT TO
  2233. 66 ╥┼═ CHANGE TO ┴=1 OR ┴=─┘
  2234. 67 ╥┼═ ╧THERWISE THE LINE ALWAYS
  2235. 68 ╥┼═ TAKES ONLY ONE STEP IN Y
  2236. 69 ╥┼═ BEFORE THE LAST POINT (X=X2-1)
  2237. 70 ┴=256-─╪:╥┼═ ┴=0                     ╠─┴     #00     ;╙AVES US A ├═╨
  2238.                                         ╙┼├
  2239.                                         ╙┬├     ─╪
  2240. 80 ─╥┴╫1,╪,┘                            ╨╨╠╧╘           ;═YSTERY PLOTTER
  2241. 90 ╥┼═ ═AIN ROUTINE                     ├╠├
  2242. 100 ╪=╪+1                          ╠╧╧╨ ╔╬╪             ;╙TEP IN X
  2243. 110 ┴=┴+─┘                              ┴─├     ─┘      ;┴DD ─┘
  2244. 120 ╔╞ ┴>=256 ╘╚┼╬ ┘=┘+1:┴=┴-─╪         ┬├├     ╬╧╨┼    ;╘IME TO STEP IN Y?
  2245. 121 ╥┼═ ╔╞ ┴>=─╪ ╘╚┼╬...                ╔╬┘             ;╙TEP IN Y
  2246.                                         ╙┬├     ─╪      ;╥ESET COUNTER
  2247. 130 ─╥┴╫1,╪,┘                      ╬╧╨┼ ╨╨╠╧╘           ;╨LOT THE POINT
  2248. 140 ╔╞ ╪<>╪2 ╘╚┼╬ ╟╧╘╧ 100              ├╨╪     ╪2      ;┴T THE ENDPOINT YET?
  2249.                                         ┬╬┼     ╠╧╧╨
  2250. 150 ╨╥╔╬╘"┴LL DONE!":╥┼═ ┘AY!
  2251.  
  2252.                                         ├YCLE COUNT:
  2253.                                               ╠╧╧╨: 2 3 2 2 3 3 3 = 18
  2254.                                                     (WORST CASE)
  2255.                                               + DX ╨╨╠╧╘S (ONE FOR EACH POINT)
  2256.  
  2257. ╘HE POINT HERE IS THAT IT'S FAST.  ╔F YOU USE SELF-MODIFYING CODE, YOU CAN
  2258. GET THIS DOWN TO 15 CYCLES PER POINT.  ╔F YOU ARE CLEVER, YOU CAN GET IT
  2259. DOWN TO 13 CYCLES PER POINT, EXCLUDING PLOT, WORST CASE. ╬OT TOO BAD!  ╫E
  2260. WON'T BE CLEVER RIGHT NOW, BUT MAYBE YOU'LL GET TO SEE IT LATER...
  2261.  
  2262. ╬OTE ALSO THAT THIS COULD EASILY BE USED IN A ┬┴╙╔├ PROGRAM; EVEN A ┬┴╙╔├2.0
  2263. PROGRAM.  (╔F YOU WOULD LIKE THE ─┴╘┴ STATEMENTS TO DO THIS JUST DROP US A
  2264. LINE, ER... CONTACT US).
  2265.  
  2266. ╬OW, THIS ROUTINE WORKS FINE, BUT FOR DRAWING A LINE ON A COMPUTER IT
  2267. DOESN'T ALWAYS LOOK GREAT.  ╞OR INSTANCE, WHAT HAPPENS IF WE DRAW A POINT
  2268. FROM 1,1 TO 11,3?  K=DX/DY=5, SO SE WILL TAKE FIVE STEPS IN X AND THEN A
  2269. STEP IN Y, THEN FIVE MORE STEPS AND... A STEP IN Y AT THE VERY LAST POINT! 
  2270. ╙O OUR LINE DOESN'T LOOK SO GOOD -- WE HAVE A LITTLE SQUARE EDGE AT THE
  2271. ENDPOINT.
  2272.  
  2273. ╧NE WAY TO FIX THIS IS TO TRICK THE COMPUTER INTO THINKING IT NEEDS TO TAKE
  2274. AN EXTRA STEP IN Y BY LETTING K=DX/(DY+1), AND BEING CAREFUL IN KEEPING
  2275. TRACK OF OUR COUNTER.  ╘HE BIG PROBLEM WITH THIS METHOD IS THAT IT PRODUCES
  2276. THE SQUARE END-PIXELS WHEN DX AND DY ARE NEARLY THE SAME (SLOPE ▐= 1).
  2277.  
  2278. ┴ BETTER WAY TO FIX THIS IS TO INITIALIZE THE COUNTER NOT TO 0 (IN OUR CASE,
  2279. 256-DX), BUT INSTEAD TO ─╪/2 (256-─╪/2 IN OUR CASE). ╘HIS HAS THE EFFECT OF
  2280. SPLITTING ONE OF THE LINE SEGMENTS BETWEEN THE TWO ENDPOINTS, AND LOOKS GOOD
  2281. FOR ALL SLOPES.  ╘HIS IS WHAT THE PROGRAM DOES.  ╔N FACT, AS FAR AS ╔ CAN
  2282. TELL, THIS IS WHAT ┬┴╙╔├7.0 DOES TOO!
  2283.  
  2284. ╘HERE IS STILL A PART OF OUR ROUTINE MISSING, HOWEVER...
  2285.  
  2286.